Выделенная память для возврата значений в C - PullRequest
0 голосов
/ 08 мая 2018

Если возвращаемое значение функции, скажем, myFunc, является выделенным пробелом. Нужно ли родительской функции все еще освобождать эту часть памяти?

Например:

char * myFunc() {
    return malloc(5);

    // free() not called
}

int main() {
    char * str = myFunc();

    // does str need to be freed?
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Освободить () или не освободить ()?

Когда процесс завершается, вся его память возвращается в систему, включая память кучи, выделенную функциями в пакете malloc. В программах, которые выделяют память и продолжают использовать ее до завершения программы, часто пропускают вызовы free(), полагаясь на это поведение для автоматического освобождения памяти. Это может быть особенно полезно в программах, которые выделяют много блоков памяти, поскольку добавление нескольких вызовов к free() может быть дорогостоящим с точки зрения процессорного времени, а также может быть сложным для кода. Хотя полагаться на завершение процесса для автоматического освобождения памяти приемлемо для многих программ, существует несколько причин, по которым может быть желательно явно освободить всю выделенную память:

? 1. Явный вызов free() может сделать программу более читабельной и поддерживаемой в условиях будущих изменений.

? 2. Если мы используем библиотеку отладки malloc для обнаружения утечек памяти в программе, то любая память, которая не освобождена явно, будет сообщаться как утечка памяти. Это может усложнить задачу поиска реальных утечек памяти.

3. Во избежание утечки памяти .

0 голосов

рекомендуется , чтобы str был освобожден: замените // does str need to be freed? на free(str). Это хорошая практика программирования, позволяющая избежать возможных утечек памяти.

В вашем случае ОС очистит выделенную память, занятую этой короткой программой.

...