C
Beginner
1 min read
malloc, realloc, and free
Example
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Dynamic array: grow on demand */
int main(void)
{
size_t capacity = 4;
size_t count = 0;
int *arr = malloc(capacity * sizeof(int));
if (!arr) { perror("malloc"); return EXIT_FAILURE; }
/* Fill beyond initial capacity to trigger realloc */
for (int i = 0; i < 10; i++) {
if (count == capacity) {
capacity *= 2;
int *tmp = realloc(arr, capacity * sizeof(int));
if (!tmp) {
free(arr); /* don't leak on failure */
perror("realloc");
return EXIT_FAILURE;
}
arr = tmp;
printf("Grew to capacity %zu\n", capacity);
}
arr[count++] = i * i;
}
printf("Array: ");
for (size_t k = 0; k < count; k++)
printf("%d ", arr[k]);
printf("\n");
/* calloc: zero-initialised */
int *zeros = calloc(5, sizeof(int));
if (zeros) {
printf("calloc zeros: %d %d %d\n", zeros[0], zeros[1], zeros[2]);
free(zeros);
}
free(arr); /* always free what you malloc */
return EXIT_SUCCESS;
}