堆栈实现Debug Assertion Failed:_CrtIsValidHeapPointer(block)

时间:2017-05-08 10:27:15

标签: c++ linked-list stack dynamic-memory-allocation pop

我想实现一个堆栈但是当我执行pop()函数时,我不能从我创建的链表中删除一个成员。

如果我不使用删除,则不会出现任何问题,但我不确定是否仍有内存泄漏

Debug Assertion Failed:_CrtIsValidHeapPointer(block)

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

我知道它与释放内存有关,但我似乎无法弄清楚问题究竟是什么。

1 个答案:

答案 0 :(得分:0)

在我看到明显错误的事情是行

delete [] end;

您应该将其更改为

delete end;

您应该只使用delete []删除对象数组(已使用new []分配)。