堆栈实现调试断言失败:_CrtIsValidHeapPointer(block)

问题描述:

我想实现一个堆栈,但是当我做pop()函数时,我不能从我创建的链表中删除一个成员。堆栈实现调试断言失败:_CrtIsValidHeapPointer(block)

,如果我不`吨使用删除,也不会出现任何问题,但如果依然内存泄露

我不知道

调试断言失败:_CrtIsValidHeapPointer(块)

class node { 
public: 
    int data; 
    node *next; 
    node *prev; 
    node() { 
     prev = NULL; 
     next = NULL; 
    } 
    node(int val) { 
     data = val; 
     prev = NULL; 
     next = NULL; 

    } 
    void show() { 
     cout << data << endl; 
    } 
}; 

class stack { 
    node *end; 
    int size; 
public: 
    stack() { 
     end = NULL; 
     size = 0; 
    } 
    void push(node * p) { 

     if (size == 0) { end = p; } 
     else { 
      end->next = p; 
      p->prev = end; 
      end = p; 
     } 
     p->show(); 
     size++; 
    } 
    void pop(){ 

     if (size == 1) { end = NULL; } 
     else { 

      node *temp = new node; 
      temp = end->prev; 
      temp->next = NULL; 
      delete end;// Debug Assertion Failed:_CrtIsValidHeapPointer(block) 
      end = temp; 

     } 
     size--;   
     end->show(); 
    } 
}; 

我知道它有与释放记忆有关,但我似乎无法弄清楚问题究竟在哪里。

+0

您是否尝试用调试器单步执行代码(或通过单击_retry_断言断点),以调查断言时变量的值是什么? –

+0

在应该删除某些东西的函数中看到'new'是非常令人惊讶的。 (这是内存泄漏。) – molbdnilo

在我看到的,这显然是错误的事情是行

delete [] end; 

您应将其更改为

delete end; 

,才应使用delete []删除对象的数组(已分配使用新的[])。