Memory leak happens when create dynamic Memory but doesn’t release :) Means when we don’t use free .

    int *ptr = malloc(N);
    // and we don't use `free(ftr)`

function Memory Leak

A common mistake of Memory leak happens when we create dynamic Memory inside function and forget to free it.

void func(){
    int *ptr;
    ptr =  malloc(sizeof(*ptr));
    /// ..... rest code
    /// we should free ptr end of its uses.
}

Reallocation Memory leak

We can often forget to free old pointer and set null which is better practice.

int *newPtr = realloc(ptr,10);
if (newPtr == NULL){
    printf("failed to allocated\n");
}else {
    printf("reallocated\n");
    // we can assign and free new `ptr`
    ptr =  newPtr;
    free(newPtr);
}