链表析构函数

Tri*_* Vu 1 c++ memory-leaks memory-management

我正在研究Linked List类.每当我编译时,我都没有错误或警告.但是,可执行文件停止工作(使用Windows Dev C++).我推断出问题是我的析构函数.

我的理解是使用delete关键字为动态创建的对象调用析构函数,或者每当对象超出堆栈中对象的作用域时.

我认为我的问题发生在我的堆栈对象(Node*result)调用析构函数时,但不是很确定.

这是我的头文件:

    #ifndef Node_H
    #define Node_H

    class Node{
          int data;
          Node* next;

    public:
           Node(int data);       
           ~Node();
           void insert(int d);
           Node* remove(int d);
           void removeDups(void);
           Node* add(Node* a, Node* b);
           void printOut(void);
    };

    #endif
Run Code Online (Sandbox Code Playgroud)

重新启动.cpp文件的部分:

    #include <iostream>
    #include "Node.h"

    using namespace std;

    Node::Node(int d){
          data = d;
          next = NULL;
          }

    Node::~Node(){
           Node* n = this;
           Node* delptr;

           while(n->next != NULL){
                         delptr = n;
                         n = n->next;
                         delete delptr;
                         }
           delete n;            

        }

    void Node::insert(int d){

          Node* n = this;
          Node* current = new Node(d);

          while(n->next != NULL){
                  n = n->next;                   
                  }

          n->next = current;
          }
Run Code Online (Sandbox Code Playgroud)

主要:

    int main (void){
        int i = 0;

        Node* root = new Node(111);
        Node* result;

        root->printOut();

        for (i = 0; i < 11; i++){
            root->insert(i);
            } 

        root->printOut();

        delete root; 
        getchar();
        return 0;   
    }
Run Code Online (Sandbox Code Playgroud)

另外,我在USB上运行Dev C++.我希望这是为了防止我的操作系统内存泄漏.那是对的吗?

谢谢

- Tring Vu

Cap*_*liC 5

delete delptr;
Run Code Online (Sandbox Code Playgroud)

这肯定是错的,因为最初delptr == this,你在析构函数中(即已经在释放请求中调用的代码)