Passing a pointer slot can hand heap ownership to a cleanup helper.

Ownership Transfer

ownership_transfer.c
#include <stdio.h>
#include <stdlib.h>

static void release(int **owner) {
    free(*owner);
    *owner = 0;
}

int main(void) {
    int value = ;
    int *owned = (int *)malloc(sizeof(int));
    *owned = value;
    int before = *owned;

    release(&owned);

    printf("before=%d released=%d\n", before, owned == 0);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

static void release(int **owner) {
    free(*owner);
    *owner = 0;
}

int main(void) {
    int value = ;
    int *owned = (int *)malloc(sizeof(int));
    *owned = value;
    int before = *owned;

    release(&owned);

    printf("before=%d released=%d\n", before, owned == 0);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

static void release(int **owner) {
    free(*owner);
    *owner = 0;
}

int main(void) {
    int value = ;
    int *owned = (int *)malloc(sizeof(int));
    *owned = value;
    int before = *owned;

    release(&owned);

    printf("before=%d released=%d\n", before, owned == 0);
    return 0;
}
owner pointer One pointer variable is responsible for freeing heap storage.
clear after free Setting the caller's pointer to `0` after `free` prevents accidental reuse.