使用mcheck检查堆的一致性

时间:2015-11-16 20:44:27

标签: c malloc heap-memory heap-corruption

我正在寻找一种定期检查堆损坏的方法。 (我的测试系统无法运行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使用的元数据,这会导致堆损坏

0 个答案:

没有答案