Advanced Pointers
Ownership Transfer
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.