下面的程序不會觸發斷言失敗:jemalloc未檢測內存損壞
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可以做一些檢查):http://linux.die.net/man/3/jemalloc「隔離內存在釋放之前不會被釋放來自隔離,...此功能特別與Valgrind [2]結合使用,可檢測訪問隔離對象的嘗試。「 – osgx