Maison > Questions et réponses > le corps du texte
Je viens d'écrire moi-même un arbre binaire pour tester l'utilisation de _CrtDumpMemoryLeaks
Le code est le suivant. Je l'ai suivi avec des points d'arrêt et j'ai constaté que tous les nœuds ont été supprimés, mais il y a toujours une invite dans la fenêtre de sortie
#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;
}
J'ai deux questions à vous poser ici :
Où est la fuite de mémoire dans ce code simple
Comment savoir où se trouve votre propre fuite de mémoire à partir des informations rapides fournies par _CrtDumpMemoryLeaks
给出的提示信息得出自己内存泄漏之处, 需要那些基础知识? 再具体些, _CrtDumpMemoryLeaks
给出的地址0x02EE2880
等如何从代码中迅速找到, 毕竟写多点的话肯定不能手动找啊. 以及 09 00 00 00 00....
, de quelles connaissances de base avez-vous besoin ? Pour être plus précis, comment trouver rapidement l'adresse 0x02EE2880
donnée par
09 00 00 00 00....
?phpcn_u15822017-05-16 13:25:55
_CrtDumpMemoryLeaks(); quand t n'a pas encore été détruit
int main()
{
{
tree t;
t.build();
}
_CrtDumpMemoryLeaks();
return 0;
}
Changez-le par ceci
Regardez les données dans le message d'invite, c'est la chaîne 09 00 00 00 que vous avez mentionnée, c'est le contenu de la mémoire divulguée
09 00 00 00| 00 00 00 00| 00 00 00 00
Les octets 0 à 3 sont des entiers, little endian ; 4 à 7 et 8 à 11 sont respectivement des pointeurs gauche et droit, et la somme est new Node(9);