以下是 C++ 中的示例代码片段:
Foo *ptr;
ptr = new Foo;
delete [] ptr;
这会遇到问题吗?删除这样的指针并释放内存的正确方法应该是什么?
谢谢
以下是 C++ 中的示例代码片段:
Foo *ptr;
ptr = new Foo;
delete [] ptr;
这会遇到问题吗?删除这样的指针并释放内存的正确方法应该是什么?
谢谢
是的,这可能会遇到问题。或不。从技术上讲,它的作用是undefined。
每一个都new必须有一个delete;每个new[]必须有一个delete[]。
在您的特定实例中,正确的代码路径可能是:
Foo *ptr;
ptr = new Foo;
delete ptr;
或者
Foo *ptr;
ptr = new Foo[7];
delete[] ptr;
您应该在没有[]. 很简单delete:
Foo *ptr;
ptr = new Foo;
delete ptr;
delete[]用于删除动态分配的对象数组,这不是您的情况。在这里,使用delete ptr;很好。
当分配单个元素时,例如int *pointer = new int
delete pointer;
当分配元素数组时,例如int *pointer = new int[5]
delete [] pointer;
很可能会导致问题,因为delete []需要在数组中存储元素的数量,以便知道调用析构函数的次数。由于new Foo不必存储该信息(因为它不是必需的delete),因此完全有可能delete []使用“垃圾”作为输入。