Выделение памяти в С++ без ключевого слова «новое»

У меня есть код, сгенерированный MATLAB Coder. Он включает в себя некоторые определения переменных этого типа:

int tmp_size[400];

Эти переменные не удаляются явно до конца области действия метода.

Переменные размещаются в куче или в стеке? Это эквивалентно следующему?

int* tmp_size = new int[400];

Было бы лучше для целей управления памятью переписать определения этих переменных с помощью new, например int* tmp_size = new int[400];?

Я замечаю, что память выделяется моей программой, которая никогда не освобождается. Может ли это быть причиной утечки памяти?


person kiriloff    schedule 22.05.2014    source источник


Ответы (1)


Эти переменные имеют область действия «автоматически». Язык гарантирует, что ваша программа освободит это хранилище в конце текущего блока. Вероятно, он находится в стеке, но ничто не заставляет реализацию использовать стек. Итог: утечки нет.

person bmargulies    schedule 22.05.2014
comment
Спасибо. Так что это правильно и не приведет к утечке памяти? - person kiriloff; 22.05.2014
comment
Да такова ситуация. - person bmargulies; 22.05.2014
comment
+1 Кроме того, массив может находиться в куче, если, скажем, он выделен в функции-члене объекта, размещенного в указанной куче. Он по-прежнему имеет автоматический срок хранения. Таким образом, хорошей абстракцией здесь является продолжительность хранения, а не стек или куча. - person juanchopanza; 22.05.2014
comment
@antitrust: правильно и без утечек памяти в отличие от вашего предложения использовать new там, где вам понадобится интеллектуальный указатель или блок try/catch для защиты от исключений или для связи со сборщиком мусора. - person Tony Delroy; 22.05.2014
comment
@juanchopanza: массив может находиться в куче, если, скажем, он выделен в функции-члене объекта, размещенного в указанной куче, - расположение объекта в памяти не имеет отношения к выделению локальной переменной функции-члена. Правильным примером является случай, когда массив является переменной-членом объекта, размещенного в куче. - person Tony Delroy; 22.05.2014
comment
@TonyD Верно. Я думал о членах данных, но в данном случае это неприменимо. - person juanchopanza; 22.05.2014