Search code examples
cmemorypointersmallocrealloc

Freeing a character pointer


I have a function which is called multiple times during the program's execution. In said function, I have a dynamic character pointer which I resize numerous times.

My question is: do I need to free this pointer before the end of the function?

void functionName()
{
 char *variable = (char *) malloc(0);
    //variable is resized with realloc x number of times

 //should free be called here?
 return;
}

I should also note that I have tried to free the pointer, however, gdb gives me warnings when I do so.


Solution

  • Yes, you have to free it or you'll leak the memory. Your code should look something like this:

    void function(void) 
    {
        char *variable = (char *)malloc(0);
    
        variable = realloc(variable, 10);
        // do something with new memory
    
        variable = realloc(variable, 20);
        // do something with more new memory
    
        free(variable);  // clean up
    }
    

    Calling malloc(0) is a little weird, I think.