Advanced Operations
1 / 5
void *q = realloc(p, bigger);
if (q == NULL) {
// p is STILL VALID!
// Original data intact
}
Never: p = realloc(p, size);
void *my_calloc(size_t n, size_t size) {
size_t total = n * size;
// Check overflow!
if (n && total/n != size) return NULL;
void *p = my_malloc(total);
if (p) memset(p, 0, total);
return p;
}
// Copy old_size bytes, not new_size!
memcpy(new_ptr, old_ptr, old_size);