asprintf - when to use free()?

c, free

Solution

You need to call `free()`.

The variable leaves the scope, so the actual value of the variable (the address that `free()` needs) is lost at that point, creating a memory leak.

The `free()` function is interested in the address of memory previously returned by `malloc()` or some other heap allocation call, not at all in your particular variable.

You could do:

char *out = NULL, *a, *b, *c, *d, *e;
int parts[16] = {1,2,05,003};
asprintf(&out, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]);
a = b = c = d = e = out;

and that's just five more variables holding copies of the same address going out of scope. The heap subsystem (as reached through the `malloc()`/`free()` calls) knows nothing about this, of course.

Problem

asprintf says The functions asprintf() and vasprintf() are analogs of sprintf(3) and vsprintf(3), except that they allocate a string large enough to hold the output including the terminating null byte, and return a pointer to it via the first argument. This pointer should be passed to free(3) to release the allocated storage when it is no longer needed. Here is my C code ``` void function(){ char *out = NULL; int parts[16] = {1,2,05,003}; asprintf(&out, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]); // free(out); } int main(void){ function(); return 0; } ``` When the function is monitored on the debug mode, I see that the variable is already destroyed when it returns from the function. Why I don't need to `free()` the code above? Could you tell me in what cases of `asprintf` I need to use free? btw, I have "gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)"

Original source