с ++ вопрос новый удалить - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть следующий код

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 ]

11 голосов
/ 26 апреля 2011

Да, есть вероятность утечки памяти, если вы не delete[] pcBlock в первом ....Переназначение указателя не приводит к автоматическому удалению того, на что он ранее указывал.

2 голосов
/ 26 апреля 2011

Операторы «new» и «delete» должны использоваться парами. В противном случае использование «new» без «удаления» приводит к утечке памяти.

1 голос
/ 26 апреля 2011

Да, скорее всего, это приведет к утечке памяти (если компилятор не достаточно умен, чтобы исправить это за вас, но большинство не будет).

Возможно, вам следует каким-то образом попытаться realloc .

1 голос
/ 26 апреля 2011

Да, ранее выделенные 1000 байтов не освобождаются, и pcBlock заменяется новым набором памяти.Нет способа освободить предыдущие 1000 байтов.Так что это утечка памяти.

0 голосов
/ 15 августа 2016

ДА, ЭТО БУДЕТ ПРИЧИНАТЬ УТЕЧКУ ПАМЯТИ


В C ++ есть одно простое правило: Каждый вызов new должен заканчиваться вызовом delete в конце. И каждый new[] -> с delete[]. В противном случае вы получите утечку памяти. C ++ - это язык, на котором программист должен сам управлять динамической памятью (или использовать сторонние библиотеки).

0 голосов
/ 17 декабря 2012

Да, будет. Возможно, вы думаете, что массивы будут перекрываться и удаляться, поэтому освободите первый массив, но на самом деле они распределены по разным частям памяти.

...