如何删除内存?

时间:2013-07-10 14:03:34

标签: c++ memory heap

假设我有结构

struct Foo {
    int whatever;
    int whatever2;
    ...
};

我有这种类型的数组

Foo **array = new Foo*[128];

然后,为每个指针指定新结构

for (int i = 0; i < 128; i++)
    array[i] = new Foo;

然后,过了一段时间我解除了分配:

delete[] array;

如何释放内存?

  1. 只释放指针空间
  2. 指针空间+这些指针指向的对象?

2 个答案:

答案 0 :(得分:3)

您的代码泄漏了内存。每次delete调用都需要调用new一次(假设new没有失败并返回NULL或抛出bad_alloc)。因此,在这种情况下,您需要与调用array[i] = new Foo;的{​​{1}}进行类似的循环。{/ 1}}

答案 1 :(得分:0)

我认为这是Scott Meyers一书中的重点之一,Effective C ++已经阅读了很久。但基本思路是,在使用new时避免内存泄漏。确保在调用new时多次调用delete,并使用delete和new []与delete []相应地映射new。所以在你的情况下,new在for循环中被调用128次而new []被调用一次,所以类似地删除应该被调用相同的方式到array [i] 128次并且delete []应该被调用一次用于数组。希望这可以帮助。