blob: b39204692968e987bf94fd3d7bb416c401a75b03 [file] [log] [blame]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NCYCLES 32768
#define NSLOTS 4096
struct slot {
char *ptr;
size_t size;
};
struct slot s[NSLOTS];
int main(void)
{
size_t sp, sq;
char *p, *ep, *q, *eq;
int r, i, j;
int ok;
int err = 0;
for ( r = 0 ; r < NCYCLES ; r++ ) {
i = lrand48() % NSLOTS;
if ( s[i].ptr ) {
free(s[i].ptr);
printf("Freed %8zu bytes at %p\n", s[i].size, s[i].ptr);
s[i].ptr = NULL;
s[i].size = 0;
} else {
sp = lrand48(); /* 32-bit random number */
sp >>= 12+(lrand48() % 20);
s[i].size = sp;
s[i].ptr = p = malloc(sp);
ep = p+sp;
ok = 1;
for ( j = 0 ; j < NSLOTS ; j++ ) {
q = s[j].ptr;
if ( i != j && q ) {
sq = s[j].size;
eq = q+sq;
if ( (p < q && ep > q) || (p >= q && p < eq) ) {
ok = 0;
err = 1;
break;
}
}
}
printf("Allocated %8zu bytes at %p, ok = %d\n", sp, p, ok);
if ( p )
memset(p, 0xee, sp); /* Poison this memory */
}
}
return err;
}