1

假设我有结构

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. 指针空间+这些指针本身指向的对象?
4

2 回答 2

3

您的代码泄漏内存。您需要delete为每次new调用调用一次(假设new不会失败并且 returnNULL或 throw bad_alloc)。因此,在这种情况下,您需要有一个与调用它的循环类似的array[i] = new Foo;循环delete array[i];

于 2013-07-10T14:06:18.247 回答
0

我认为这是 Scott Meyers 书中的要点之一,Effective C++ have read long back。但基本思想是,避免在使用 new 时发生内存泄漏。确保调用 delete 的次数与调用 new 的次数一样多,并相应地将 new 与 delete 和 new[] 与 delete[] 映射。所以在你的情况下, new 在 for 循环中被调用了 128 次,而 new[] 被调用了一次,所以同样地,delete 应该以与 array[i] 相同的方式调用 128 次,并且 delete[] 应该为 array 调用一次。希望这可以帮助。

于 2013-07-10T15:43:35.130 回答