При передаче динамического массива из функции нету утечки памяти?
У меня есть функция:
int** matrix(){
int** arr_func = new int* [3];
//...
return are_func
}
Основная часть программы:
int main() {
int** infoBusy = new int* [1];
infoBusy = matrix();
//....
for (int i = 0; i < 1; i++){
delete[] infoBusy[i];
}
delete[] infoBusy;
Матрица infoBusy удаляется в основном коде, но удаляется ли матрица arr_func что в функции?
Ответы (1 шт):
Утечка есть, но не там, где вы ее ждете.
То, что выделено в функции, честно удаляется. Утечка при перезаписи -
int** infoBusy = new int* [1]; // Вот этот указатель не сохраняется и "утекает"
infoBusy = matrix();
Пишите просто
int** infoBusy = matrix();
Смотрите - утечка возникает, когда выделена динамическая память, но не удалена. Как в вашем исходном коде - память выделена, указатель записан в переменную, тут же перезаписан - и теперь при всем желании его невозможно получить, чтобы освободить выделенную память. Утечка!
В функции она у вас выделена, указатель на нее возвращен, и память по этому указателю удалена. Сама переменная are_func располагается в стеке и ее память освобождается при завершении функции. Еще раз - память, выделенная для переменной, а не выделенная память, указатель на которую хранится в этой переменной.
Почитайте эту модель. В ее рамках возврат из функции - вы просто передаете документы и ключи от прокатной машины другу. Если друг, попользовавшись, честно сдаст ее обратно - никаких проблем не возникнет...