我试图理解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/

10-09 19:34