Когда вы выделяете память в функции, она автоматически освобождается при возврате? - PullRequest
0 голосов
/ 27 сентября 2019

Вот мой код:

    char* sub_str(char* str, const int start_index, const int length) 
    {
        char* new_str = (char*) calloc(length, sizeof(char));
        for (int i = start_index; i < length + start_index; i++) 
        {
            new_str[i - start_index] = str[i];
        }
        return new_str;
    } 

Как мне освободить new_str, потому что я должен его вернуть?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2019

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

Подпрограмма, вызывающая эту функцию, отвечает за освобождение памяти (или должнапередать это обязательство своему абоненту).В документации вашей процедуры sub_str должно быть четко указано, что она выделяет память и что вызывающая сторона ответственна за ее освобождение.

0 голосов
/ 27 сентября 2019

Когда вы выделяете память в функции, автоматически ли она освобождается при возврате?

Зависит от того, как вы выделяете память.

Если вы используете malloc(), calloc() или realloc() для выделения памяти, тогда она не будет освобождена до тех пор, пока / или программа не освободит ее явно (например, с помощью вызова free() где-нибудь).

Если вы используете локальные переменные (например, char new_str[length];), чтобы выделить память, тогда она будет освобождена, когда функция вернется.

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