【发布时间】:2016-10-10 11:37:29
【问题描述】:
以下程序不会触发断言失败:
int main(int argc, char **argv)
{
int * n = (int *)malloc(100);
//malloc_stats_print(nullptr, nullptr, "gablh");
free(n);
*n += 1;
std::cerr << *n << std::endl;
for (int i = 0; i != 10; ++i) {
std::cerr << *(n+i) << std::endl;
}
}
当我运行程序时
MALLOC_CONF="quarantine:32,abort:true,stats_print:true" ex_stats_pr
我明白了:
1515870811
1515870811
1515870810
1515870810
1515870810
1515870810
1515870810
1515870810
1515870810
1515870810
1515870810
有没有办法用 jemalloc 触发中止失败?
【问题讨论】:
-
阿弥陀佛,jemalloc有机会做检查吗?你的程序释放,然后尝试破坏内存,打印一些东西然后退出,而不需要对 jemalloc 进行任何额外的调用。例如,隔离选项应该与 valgrind 一起使用,而不仅仅是在普通运行中(valgrind 可能会做一些检查):linux.die.net/man/3/jemalloc“隔离的内存在从隔离区释放之前不会被释放,...这个功能特别有用与 Valgrind [2] 结合使用,可以检测访问隔离对象的尝试。”