Maison  >  Questions et réponses  >  le corps du texte

c++ - À propos de _CrtDumpMemoryLeaks

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 :

  1. Où est la fuite de mémoire dans ce code simple

  2. 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

    à partir du code ? Après tout, écrivez S'il y en a plus, vous ne pouvez certainement pas rechercher manuellement. Et que représente 09 00 00 00 00.... ?
🎜
ringa_leeringa_lee2685 Il y a quelques jours723

répondre à tous(1)je répondrai

  • phpcn_u1582

    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);

    répondre
    0
  • Annulerrépondre