我正在寻找一种定期检查堆损坏的方法。 (我的测试系统无法运行valgrind或任何其他类似工具)
我试图找出为什么这段代码不起作用:
int main() {
if (mcheck(NULL) != 0) {
fprintf(stderr, "mcheck() failed\n");
exit(EXIT_FAILURE);
}
while (1) {
usleep(1);
char *a = (char *)malloc(726);
/* touching the block to own it */
a[5] = 12;
free(a);
/* write after free */
memset(a, 0xBD, 726);
/* this should go wild ! */
mcheck_check_all();
}
}
双重免费实际上可以解决这个问题,但我得到了一个中止调用,但没有在释放后使用内存(由于malloc使用的元数据,这会导致堆损坏