我试图理解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更方便。
但是,您链接到的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");
} }
关于c++ - 如何在GNU C中使用mcheck进行堆一致性检查?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28529620/