C ++使用delete []删除指针?

时间:2013-09-19 18:31:10

标签: c++ memory-management

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

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

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

谢谢

4 个答案:

答案 0 :(得分:10)

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

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

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

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

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

答案 1 :(得分:5)

您应该在没有[]的情况下将其删除。简单delete

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

答案 2 :(得分:3)

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

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

    delete pointer;

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

    delete [] pointer;

答案 3 :(得分:2)

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