Как "освободить" переменную после окончания функции?
Как правильно освободить выделенную память после выполнения функции в C (через malloc)? Мне нужно выделить память, использовать ее как-то и вернуть ее обратно, чем я должен ее освободить.
char* someFunction(char* a, char* b) {
char* result = (char*)malloc(la + 2 * sizeof(char));
...
return result;
}
5 ответов
использовать free
. В вашем случае это будет:
char* result = malloc(la + 2 * sizeof(char));
...
free (result);
кроме того, если вы возвращаете выделенную память, например strdup
делает, вызывающий вашу функцию должен освободить память. Например:
result = somefunction ();
...
free (result);
если вы думаете освободить его после возвращения, это невозможно. Как только вы return
что-то из функции, она автоматически прекращается.
в коде, который называется someFunction
.
вы также должны внести ясность в документацию (у вас есть это, верно?!), что то абонента нужно позвонить free
, после завершения использования возвращаемого значения.
Если вы возвращаете выделенную память, то это ответственность вызывающего абонента, чтобы освободить его.
char *res;
res = someFunction("something 1", "something 2");
free(res);
Если вы имеете в виду, что возвращаемое значение не требуется в вызывающей функции, и функция вызывается из-за его побочных эффектов, то вы можете просто написать
free( someFunction( p, q ) );