如何在GNU C中使用mcheck进行堆一致性检查
How to use mcheck for Heap Consistency Check in GNU C?
我正在努力了解堆一致性检查在GNU C库中是如何工作的。I参考http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html#Heap-一致性检查
这是我写的一个示例程序。正如手册中所建议的那样,如果我在gdb中运行并调用mcheck(0)
,我的自定义abortfn
将被调用。但它没有被召唤。
我在这里错过了什么?
包括必要的标题。
void *abortfn(enum mcheck_status status)
{
switch(status) {
case MCHECK_DISABLED:
printf("MEMCHECK DISABLEDn");
break;
default:
printf("MEMCHECK ENABLEDn");
}
}
int main()
{
printf("This is mcheck testing coden");
int *a = (int *) malloc(sizeof(int));
*a = 10;
printf("A: %dn", *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 DISABLEDn");
break;
default:
printf("MEMCHECK ENABLEDn");
} }
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 如何在GNU C中使用mcheck进行堆一致性检查