Вопрос освобождения памяти - PullRequest
1 голос
/ 11 июня 2011

Я просто хочу убедиться, что я правильно освобождаю память в моей программе ...

Я строю динамически размещенный двумерный массив в одной функции (build_proc_table ()) и возвращаю массив туда, где была вызвана функция (main ()). Массив хранится в переменной в main (), и я создал функцию «деструктор», которая освобождает память, но деструктор также вызывается в main (), а не там, где изначально была выделена память для массива (в build_proc_table ()) ...

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

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Не зная, какой язык вы используете, подробности сложны.Однако до тех пор, пока вы не измените ссылку между выделением и освобождением, не имеет значения, где освобождается память.Однако, если вы измените, какой адрес памяти адресуется между выделением и освобождением (без освобождения до изменения), у вас будет утечка памяти.

В C ++, например ...

int main(){
  int* j = new int[10];
  j = new int[10];
  delete j;
}

Это будет утечка памяти, так как первый массив не удален.Это, очевидно, упрощенный пример, являющийся одномерным и не использующий функции.

2 голосов
/ 11 июня 2011

Любая память, которую вы выделяете вручную, имеет время жизни, которое не связано с ее областью действия. Пока память, выделенная где-то, будет освобождена где-то еще позже, у вас все будет хорошо. Неважно, откуда он вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...