不同地方的分段故障

时间:2011-10-23 07:03:11

标签: c++ gdb

我有一个相当不错的大小程序(~1000 loc)。

当我运行程序时,

./indexer

在第800次迭代时给出分段错误。

但是当我做的时候

gdb indexer
run

它远远超过800th并且在第1200次迭代时显示seg故障。

我不明白为什么会这样发生。我正在做的任何可能错误的指示?

修改 问题是在两种情况下可执行文件的不同行为可能是什么原因?

3 个答案:

答案 0 :(得分:3)

使用调试器运行程序时运行的条件可能非常不同。如果您的程序中存在错误,尤其是未定义行为的错误,则可能发生任何事情。

由于在使用调试器时问题仍然存在,我首先调试,然后如果在调试器下运行时问题得到解决,那么你就完成了。否则你还有一些工作要做。

答案 1 :(得分:2)

如果您使用的是类Unix系统,例如Ubuntu,请安装valgrind:

sudo apt-get install valgrind

并运行它以检测与内存相关的错误:

valgrind indexer

如果您使用其他操作系统,请转到valgrind website并获取安装说明。

在1k loc,我还建议您养成使用类似googletest之类的单元测试的习惯:随着程序变大,它将为您节省大量的调试时间。

答案 2 :(得分:0)

您正在读取或写入尚未由您的程序分配的内存位置。要确切了解这里发生了什么,但是你需要发布代码,最好是一个仍然是段错误的小例子。