强制coredump对glib free错误
force coredump on glib free error
当我运行我的程序时,我得到以下错误,它不会在gdb下发生。我怎么能强迫glibc或ubuntu转储核心中止?我尝试了"ulimit -c unlimited"。但是,这不是赛区的失误,也不是运气不好。此外,我在valgrind中有太多的内存错误,修复所有这些错误将花费很多时间。
同样,将MALLOC_CHECK_设置为0不会强制程序退出。但是,这不是我的选择。
* glibc detected ./main: free(): invalid next size (fast): 0x0000000000ae0560 **
编辑总之,我找到了导致valgrind中glibc损坏的原因。保持开放,看看是否可行
来自glibc文档:
如果MALLOC_CHECK_设置为0,任何检测到的堆损坏将被静默忽略;如果设置为1,则在stderr上打印诊断信息;如果设置为2,则立即调用abort。
调用abort()
通常会产生一个核心转储(取决于ulimit -c
的设置)。
使用Valgrind诊断并修复问题。这会更快,更直接,因为这看起来确实像一个典型的堆损坏。
如果你使用一个通用的包,那么你的发行版可能有一个可用的(Valgrind)包。
创建核心转储的唯一其他方法是在转储发生之前将GDB附加到进程上。但这仍然不能让你更接近于导致问题的解决方案。Valgrind是更好的方法。
相关文章:
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- 为什么'allocate in one library and free in the other'是错误的
- 不断得到分段错误和free()无效指针
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- free() 中的错误:大小无效
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- C 运行时错误:Free():下一个大小无效(快速)
- "double free or curruption " C++ 中的错误
- free():C++中的指针错误无效
- "./pw"中的错误:free():无效指针:0x0000000000602200***
- omnet++free():指针无效,错误134/139
- 在析构函数中检测到"Trying to free invalid pointer"错误
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- 在回溯中使用“delete”解除分配时,出现“free()”错误
- 我在使用删除 [] 运算符时收到 free() 错误
- Boost::Serialization:如何避免双保存指针?(并得到一个free.c错误)
- 强制coredump对glib free错误