I read from many question here in SO and some other articles regarding free() function in c that frees the memory of unused variables. In my case, I have the following code block.
char *injectStrAt(char *str, char *strToIn, int pos)
{
char *strC = malloc(strlen(str) + strlen(strToIn) + 1);
strncpy(strC, str, pos);
strC[pos] = '\0';
strcat(strC, strToIn);
strcat(strC, str + pos);
return strC;
}
The above function I use to inject a string block in to an array. I am using malloc
to create a new char*
. In the above case do I need to do free(strC)
? advice pls.
No you shouldn't free
strC
inside this function because it is the return value of this function. If you do so the statement:will return some unexpected or garbage value.
So when should you free up the memory? Well, you should do it after the value of
strC
is returned from the functioninjectStrAt()
tostringA
, in this particular case. Although generally memory is freed when the string or the variable to which the memory was allocated is no longer required.strC
is the return value of this function, so you don't callfree(strC)
inside the function itself. You need to free it outside the function, the time when this string is not used anymore.Since your function is returning
strC
, one presumes it must remain valid after the return of this function, thus this function must notfree()
that buffer. Once it's freed, the buffer is no longer valid so must not be used.Your caller is responsible for freeing it in this case.