c - 如何编写一个抛出 glibc 的自定义 free?

标签 c gcc malloc free glibc

我正在重写一个自定义 malloc,我希望能够在双重释放或损坏时抛出 glibc 错误,而不是经典的 SegFault。这可能吗?

*** glibc detected *** a.out: double free or corruption (fasttop): 0x0804b048 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6ff0b)[0xb74baf0b]
/usr/local/gcc/gcc-cilk/lib/libstdc++.so.6(_ZdlPv+0x1f)[0xb7671b4f]
/usr/local/gcc/gcc-cilk/lib/libstdc++.so.6(_ZdaPv+0x1b)[0xb7671b9b]
a.out[0x8048983]
a.out[0x8048b12]
a.out[0x80487d7]
ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
Aborted

最佳答案

我认为这不容易完成,因为当两次调用 free() 时不会抛出异常 - 就像尝试分配内存但分配失败的情况一样 - 这是相当未定义的行为。 查看this post了解更多详情。

你可以做的是实现你自己的机制来跟踪分配/释放的内存 - 有点像智能指针的工作方式。只有您会专门尝试确定内存何时被释放两次。

关于c - 如何编写一个抛出 glibc 的自定义 free?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750237/

相关文章:

c - 为什么int的值会改变?

将 C 语言转换为 MIPS 汇编语言

linux - '#pragma GCC optimize ("O 3")' 是什么意思?

c - 当我将 gcc 与 -O1 优化一起使用时。数组数据初始化被忽略,当我尝试使用数组时,我最终得到未初始化的数据

C fopen 在 eclipse 中运行时不会打开文件

c - 在 C 中跳过关键代码的类似 try-catch 的行为

c++ - 如何知道析构函数中的堆栈损坏来自何处?

C malloc 字符串结构数组

c - Malloc 和免费 : memory being freed was not allocated

c++ - jemalloc 未检测到内存损坏