c++删除分配给基类指针的派生类的指针

标签 c++ visual-studio pointers

我有以下代码:

/* Example OOPBEI03.CPP  */
#include <iostream>

using namespace std;

typedef char item;

class stack
{
private:
    int p;
protected:
    item *st;
public:
    stack(int m=100)
    {
        st = new item[m];
        p = 0;
    }

    ~stack()
    {
        delete [] st;
    }

    void push(item v)
    {
        st[p++] = v;
    }

    item pop()
    {
        return st[--p];
    }

    int empty()
    {
        return !p;
    }
};

class queue : public stack
{
private:
    int q;
    item *qp;
public:
    queue(int m=50):stack(m)
    {
        q = 0;
        qp = st;
    }

    ~queue()
    {
        delete qp;
    }

    item deque()
    {
        return qp[q++];
    }
};

int main()
{
    stack s(50);
    queue q(20);

    s.push('a');
    q.push('b');
    s.push('c');
    q.push('d');

    cout<<"pop   "<<s.pop()<<endl;
    cout<<"pop   "<<s.pop()<<endl;
    cout<<"deque "<<q.deque()<<endl;
    cout<<"deque "<<q.deque()<<endl;
    cout<<"empty queue? "<<q.empty()<<endl;
    cout<<"empty stack? "<<s.empty()<<endl;

    getchar();
    return 0;
}

我在 Visual Studio 中的 main() 结束时遇到以下错误:“调试断言失败!... _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”。

如果我在类队列或堆栈的析构函数中取消注释删除操作(我只取消注释一个操作!),我没有问题。

我该如何解决这个问题?

最佳答案

删除 qp 应该和新建一样(这是我的术语))。

delete [] qp;
       ^^

但在这种特殊情况下,删除 qp 应该完全删除

关于c++删除分配给基类指针的派生类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431288/

相关文章:

c++ - C丢失指针

c# - 在 SQL 数据库中搜索 (C# UWP)

visual-studio - Visual Studio 2015 更新 3 未安装(无错误或反馈)

c - 将指向结构的指针保存到指针数组中

c++ - 将 const uint * 的值复制到 C++ 中的另一个变量

c++ - 获取当前桌面壁纸的路径

c++ - std::basic_string 每次都会破坏空终止吗?

c - C中的内存分配

c++ - std::array 的这个 union 的公共(public)初始序列有问题吗?

c# - Azure 门户中的 Azure Function Environment.GetEnvironmentVariable 对象引用错误