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)"