#include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #define N_PTRS 1000 #define N_ALLOCS 10000 #define MAX_SIZE 0x10000 #define random_size() (random()%MAX_SIZE) #define random_ptr() (random()%N_PTRS) int test1(void); int test2(void); int main(int argc, char *argv[]) { return test1() + test2(); } int test1(void) { void **ptrs; int i,j; int size; int ret = 0; srandom(0x19730929); ptrs = malloc(N_PTRS*sizeof(void *)); for(i=0; i<N_PTRS; i++){ if ((ptrs[i] = malloc(random_size())) == NULL) { printf("malloc random failed! %i\n", i); ++ret; } } for(i=0; i<N_ALLOCS; i++){ j = random_ptr(); free(ptrs[j]); size = random_size(); ptrs[j] = malloc(size); if (!ptrs[j]) { printf("malloc failed! %d\n", i); ++ret; } memset(ptrs[j],0,size); } for(i=0; i<N_PTRS; i++){ free(ptrs[i]); } return ret; } int test2(void) { void *ptr = NULL; int ret = 0; ptr = realloc(ptr,100); if (!ptr) { printf("couldn't realloc() a NULL pointer\n"); ++ret; } else { free(ptr); } ptr = malloc(100); ptr = realloc(ptr, 0); if (ptr) { printf("realloc(,0) failed\n"); ++ret; free(ptr); } return ret; }