无法删除类指针

Kae*_*xer 0 c++ dynamic-memory-allocation

Class Example
{
    // ...
};

int main()
{
    Example** pointer = new Example*[9];

    for(int i = 0; i < 10; i++)
    {
        pointer[i] = new Example();
    }

    for(int i = 0; i < 10; i++)
    {
        delete pointer[i];
    }

    delete[] pointer; // <--- This is problem
    pointer = nullptr;
}
Run Code Online (Sandbox Code Playgroud)

我试图将对象的地址保存在数组中。当我尝试删除它们时,for循环工作得很好,但delete[] pointer会导致“写到堆缓冲区的内存末端”错误。我究竟做错了什么?我也应该删除吗?在此处输入图片说明

wal*_*nut 5

您的数组太小:

Example** pointer = new Example*[9];
Run Code Online (Sandbox Code Playgroud)

您正在分配9个元素,这意味着它们的索引为0,1,2,...,8。

在这里的循环中:

 pointer[i] = new Example();
Run Code Online (Sandbox Code Playgroud)

和这里:

 delete pointer[i];
Run Code Online (Sandbox Code Playgroud)

您正在访问,pointer[9]因为循环条件为i < 10。这是超出范围的,访问该值会导致未定义的行为。

而是创建一个包含10个元素的数组:

Example** pointer = new Example*[10];
Run Code Online (Sandbox Code Playgroud)