我试图了解堆一致性检查在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;
}
答案 0 :(得分:2)
今天,编译所有警告&调试信息(gcc -Wall -Wextra -g
)然后使用valgrind更方便。
但是,您链接到的very文档说:
一旦你用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");
} }