我无法继续前进,看到核心倾销。
当我输入
时,我得到了这个gdb normal_estimation core
Reading symbols from /home/sai/Documents/pcl_learning/normal_estimation/build/normal_estimation...(no debugging symbols found)...done.
warning: core file may not match specified executable file.
[New LWP 11816]
warning: Can't read pathname for load map: Input/output error.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
Core was generated by `./normal_estimation'.
Program terminated with signal 11, Segmentation fault.
#0 0xb53101d6 in free () from /lib/i386-linux-gnu/libc.so.6
(gdb)
请告诉我该怎么办?
答案 0 :(得分:3)
程序因信号11,分段故障而终止
#0 0xb53101d6 in free () from /lib/i386-linux-gnu/libc.so.6
您需要学习的第一个命令是backtrace
(或其同义词:where
)。
这将告诉您哪个代码调用了free
,它崩溃了。
但是,该代码可能与实际问题无关:free
中的任何崩溃总是由某种堆损坏引起(释放未分配的内存,释放相同的内存两次,写入已经释放的内存,或者溢出已分配的缓冲区。)
诊断Linux上的堆损坏最有用的工具是Valgrind和AddressSanitizer。这些工具中的任何一个都可能会告诉你完全你做错了什么。