C Compiler Logo

Double Free

Double Free

memory

double free or corruption

Description

The program attempts to free memory that has already been freed.

Common Causes

Example of Error

Error Code

int main() {
    int *ptr = malloc(sizeof(int));
    free(ptr);
    free(ptr);  // Double free
    return 0;
}

Solution

Set pointers to NULL after freeing them and check before freeing.

Corrected Code

int main() {
    int *ptr = malloc(sizeof(int));
    if (ptr != NULL) {
        free(ptr);
        ptr = NULL;  // Set to NULL after freeing
    }
    
    // If we try to free again, check first
    if (ptr != NULL) {
        free(ptr);
        ptr = NULL;
    }

    return 0;
}

Additional Tips