Как "освободить" переменную после окончания функции?

Как правильно освободить выделенную память после выполнения функции в 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);

Ну ты return Это функция вызова, а затем просто free указатель в вызывающей функции.


Если вы имеете в виду, что возвращаемое значение не требуется в вызывающей функции, и функция вызывается из-за его побочных эффектов, то вы можете просто написать

free( someFunction( p, q ) );