blob: 18450739ccd8b65a45628a7508c9fb01be772847 [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;
}