我有一个相当不错的大小程序(~1000 loc)。
当我运行程序时,
./indexer
在第800次迭代时给出分段错误。
但是当我做的时候
gdb indexer
run
它远远超过800th并且在第1200次迭代时显示seg故障。
我不明白为什么会这样发生。我正在做的任何可能错误的指示?
修改 问题是在两种情况下可执行文件的不同行为可能是什么原因?
答案 0 :(得分:3)
使用调试器运行程序时运行的条件可能非常不同。如果您的程序中存在错误,尤其是未定义行为的错误,则可能发生任何事情。
由于在使用调试器时问题仍然存在,我首先调试,然后如果在调试器下运行不时问题得到解决,那么你就完成了。否则你还有一些工作要做。
答案 1 :(得分:2)
如果您使用的是类Unix系统,例如Ubuntu,请安装valgrind:
sudo apt-get install valgrind
并运行它以检测与内存相关的错误:
valgrind indexer
如果您使用其他操作系统,请转到valgrind website并获取安装说明。
在1k loc,我还建议您养成使用类似googletest之类的单元测试的习惯:随着程序变大,它将为您节省大量的调试时间。
答案 2 :(得分:0)
您正在读取或写入尚未由您的程序分配的内存位置。要确切了解这里发生了什么,但是你需要发布代码,最好是一个仍然是段错误的小例子。