0

以下是 C++ 中的示例代码片段:

Foo *ptr;
ptr = new Foo;
delete [] ptr;

这会遇到问题吗?删除这样的指针并释放内存的正确方法应该是什么?

谢谢

4

4 回答 4

10

是的,这可能会遇到问题。或不。从技术上讲,它的作用是undefined

每一个都new必须有一个delete;每个new[]必须有一个delete[]

在您的特定实例中,正确的代码路径可能是:

Foo *ptr;
ptr = new Foo;
delete ptr;

或者

Foo *ptr;
ptr = new Foo[7];
delete[] ptr;
于 2013-09-19T18:32:57.667 回答
5

您应该在没有[]. 很简单delete

Foo *ptr;
ptr = new Foo;
delete ptr;
于 2013-09-19T18:33:04.063 回答
3

delete[]用于删除动态分配的对象数组,这不是您的情况。在这里,使用delete ptr;很好。

  • 当分配单个元素时,例如int *pointer = new int

    delete pointer;

  • 当分配元素数组时,例如int *pointer = new int[5]

    delete [] pointer;

于 2013-09-19T18:32:40.163 回答
2

很可能会导致问题,因为delete []需要在数组中存储元素的数量,以便知道调用析构函数的次数。由于new Foo不必存储该信息(因为它不是必需的delete),因此完全有可能delete []使用“垃圾”作为输入。

于 2013-09-19T18:44:34.413 回答