Rumah  >  Soal Jawab  >  teks badan

c++ - Mengenai _CrtDumpMemoryLeaks

Saya hanya menulis pokok binari sendiri untuk menguji penggunaan _CrtDumpMemoryLeaks Kodnya adalah seperti berikut. Saya menjejakinya dengan titik putus dan mendapati semua nod telah dipadamkan, tetapi masih terdapat gesaan dalam tetingkap keluaran.

#include "stdafx.h"
#include <iostream>
#include <string>
#include <crtdbg.h>
class Node
{
public:
    int data;
    Node *lchild;
    Node *rchild;
    Node(int d) : data{ d }, lchild{ NULL }, rchild{ NULL } {}
};
class tree
{
public:
    Node *root;
    tree() : root{ NULL } {}
    void build()
    {
        root = new Node(5);
        root->lchild = new Node(6);
        root->rchild = new Node(7);
        root->lchild->lchild = new Node(8);
        root->lchild->rchild = new Node(9);
        in(root);
    }
    void remove(Node *node)
    {
        if (node->lchild != NULL)
        {
            remove(node->lchild);
        }
        if (node->rchild != NULL)
        {
            remove(node->rchild);
        }
        delete node;
    }
    void in(Node *node)
    {
        if (node->lchild != NULL)
        {
            preorder(node->lchild);
        }
        std::cout << node->data << " ";
        if (node->rchild != NULL)
        {
            preorder(node->rchild);
        }
    }
    ~tree()
    {
        remove(root);
    }
    void convert(std::string &pre, std::string &in)
    {

    }
};
int main()
{
    tree t;
    t.build();
    _CrtDumpMemoryLeaks();
    return 0;
}

Saya ada dua soalan untuk anda di sini:

  1. Di manakah kebocoran memori dalam kod mudah ini

  2. Bagaimana untuk mengetahui di mana kebocoran memori anda sendiri daripada maklumat segera yang diberikan oleh

    , apakah pengetahuan asas yang anda perlukan Untuk lebih spesifik, bagaimana anda boleh mencari alamat 0x02EE2880 yang diberikan oleh _CrtDumpMemoryLeaks给出的提示信息得出自己内存泄漏之处, 需要那些基础知识? 再具体些, _CrtDumpMemoryLeaks给出的地址0x02EE2880等如何从代码中迅速找到, 毕竟写多点的话肯定不能手动找啊. 以及 09 00 00 00 00.... dengan cepat? daripada kod? Lagipun, tulis Jika ada lagi, anda pasti tidak boleh mencari secara manual Dan apakah yang 09 00 00 00 00.... mewakili?

  3. .
ringa_leeringa_lee2686 hari yang lalu726

membalas semua(1)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-05-16 13:25:55

    _CrtDumpMemoryLeaks(); apabila t belum dimusnahkan lagi

    int main()
    {
        {
            tree t;
            t.build();
        }
        _CrtDumpMemoryLeaks();
        return 0;
    }

    Tukar kepada ini

    Lihat dari data dalam mesej gesaan, ia adalah rentetan 09 00 00 00 yang anda nyatakan, ini adalah kandungan memori yang bocor

    09 00 00 00| 00 00 00 00| 00 00 00 00

    Bait 0-3 ialah int, endian kecil 4-7 dan 8-11 masing-masing adalah penunjuk kiri dan kanan, dan jumlahnya ialah Nod(9);

    balas
    0
  • Batalbalas