malloctest2.c

来自「klibc精简化的c程序库」· C语言 代码 · 共 63 行

C
63
字号
#include <stdlib.h>#include <stdio.h>#include <string.h>#define NCYCLES 32768#define NSLOTS  4096struct 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;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?