问题新删除



我有以下代码

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++是一种程序员应该自己控制动态内存(或使用第三方库)的语言。

最新更新