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会导致“写到堆缓冲区的内存末端”错误。我究竟做错了什么?我也应该删除吗?
您的数组太小:
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)