假设我有结构
struct Foo {
int whatever;
int whatever2;
...
};
我有这种类型的数组
Foo **array = new Foo*[128];
然后,为每个指针指定新结构
for (int i = 0; i < 128; i++)
array[i] = new Foo;
然后,过了一段时间我解除了分配:
delete[] array;
如何释放内存?
答案 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 []应该被调用一次用于数组。希望这可以帮助。