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:
, 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?
_CrtDumpMemoryLeaks(); apabila t belum dimusnahkan lagi
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
Bait 0-3 ialah int, endian kecil 4-7 dan 8-11 masing-masing adalah penunjuk kiri dan kanan, dan jumlahnya ialah Nod(9);