如何在GNU C中使用mcheck进行堆一致性检查?

我试图了解堆一致性检查在GNU C库中的工作原理。 我指的是http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-Consistency-Checking

这是我编写的示例程序。 我按照手册中的建议,如果我在gdb中运行并调用mcheck(0)我将调用我的自定义abortfn 。 但它没有被召集。

我在这里想念的是什么?

包括必要的标题。

 void *abortfn(enum mcheck_status status) { switch(status) { case MCHECK_DISABLED: printf("MEMCHECK DISABLED\n"); break; default: printf("MEMCHECK ENABLED\n"); } } int main() { printf("This is mcheck testing code\n"); int *a = (int *) malloc(sizeof(int)); *a = 10; printf("A: %d\n", *a); free(a); return 0; } 

今天,编译所有警告和调试信息( gcc -Wall -Wextra -g )然后使用valgrind更方便。

但是,您链接到的文档说:

一旦你用malloc分配任何东西就开始分配检查为时已晚

所以开始你的main作为

  int main() { mcheck(abortfn); 

但是,您的abortfn应返回void因此将其编码为:

  void abortfn(enum mcheck_status status) { switch(status) { case MCHECK_DISABLED: printf("MEMCHECK DISABLED\n"); break; default: printf("MEMCHECK ENABLED\n"); } }