с++问题新删除

时间:2011-04-26 12:41:29

标签: c++ syntax memory-leaks

我有以下代码

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;
}

6 个答案:

答案 0 :(得分:11)

是的,如果您在第一个delete[] pcBlock中没有...,则可能会发生内存泄漏。重新分配指针不会自动删除它先前指向的内容。

答案 1 :(得分:2)

运营商“新”和“删除”应成对使用。否则,使用“new”而不“删除”会导致内存泄漏。

答案 2 :(得分:1)

是的,先前分配的1000个字节未被释放,并且pcBlock被新的内存集替换。无法释放前1000个字节。这是一个内存泄漏。

答案 3 :(得分:1)

是的,它很可能会泄漏内存(除非编译器足够聪明,可以为你解决这个问题,但大多数都不会)。

也许你应该以某种方式尝试realloc

答案 4 :(得分:0)

是的,它会的。可能你认为数组会重叠并删除因此将释放第一个数组,但事实上它们被分配给内存的不同部分。

答案 5 :(得分:0)

是否会导致内存泄漏

在C ++中有一个简单的规则: new的每次通话都应在结束时拨打delete。 每new[] - >与delete[]。否则你会得到内存泄漏。 C ++是程序员应该自己控制动态内存(或使用第三方库)的语言。