在c++中有一个简单的规则:
我有以下代码
void foo()
{
char* pcBlock = new char[1000];
...
delete[] pcBlock;
...
pcBlock = new char[100000];
...
delete[] pcBlock;
}
下面的代码会导致内存泄漏吗?
void foo()
{
char* pcBlock = new char[1000];
...
pcBlock = new char[100000];
...
delete[] pcBlock;
}
是的,如果您在第一个...
中没有delete[] pcBlock
,则可能存在内存泄漏。对指针重新赋值不会自动删除它先前指向的对象。
操作符"new"one_answers"delete"应成对使用。否则,使用"new"而不使用"deleting"会导致内存泄漏。
是的,之前分配的1000字节没有被释放,pcBlock被替换为一组新的内存。没有办法释放前1000字节。所以这是内存泄漏
是的,它很可能会泄漏内存(除非编译器足够聪明,可以为您解决这个问题,但大多数不会)。
也许你应该试着以某种方式重新分配。
会的。可能您认为数组会重叠,因此删除将释放第一个数组,但实际上它们被分配到内存的不同部分。
是会导致内存泄漏
在c++中有一个简单的规则:
new
的每次呼出都以delete
的呼出结束。每个new[]
->和delete[]
。否则,您将获得内存泄漏。c++是一种程序员应该自己控制动态内存(或使用第三方库)的语言。