我想确定是什么导致了段错误,我正在尝试使用 valgrind 来执行此操作。
https://gist.github.com/4349869是一个要点,当我在没有 valgrind 的情况下运行某些东西时会出现段错误,但是当我使用 valgrind 时不会出现段错误。(我已经重复了几次,结果相同)
这是否意味着该错误是我使用 valgrind 时不会发生的 heisenbug,因此 valgrind 在这里没有任何用处?
我想确定是什么导致了段错误,我正在尝试使用 valgrind 来执行此操作。
https://gist.github.com/4349869是一个要点,当我在没有 valgrind 的情况下运行某些东西时会出现段错误,但是当我使用 valgrind 时不会出现段错误。(我已经重复了几次,结果相同)
这是否意味着该错误是我使用 valgrind 时不会发生的 heisenbug,因此 valgrind 在这里没有任何用处?
这是否意味着该错误是我使用 valgrind 时不会发生的 heisenbug,因此 valgrind 在这里没有任何用处?
不,您仍然应该使用 Valgrind 并修复所有报告的错误。您描述的行为相当普遍,它记录在Valgrind FAQ中:
当一个程序在 Valgrind 下运行时,它的环境与它在本地运行时略有不同。比如内存布局不同,线程调度方式不同。
大多数时候这并没有什么区别,但它可以,特别是如果你的程序有问题。例如,如果您的程序因为错误地访问不可寻址的内存而崩溃,那么在 Valgrind 下运行时,该内存可能不会不可寻址。或者,如果你的程序有数据竞争,这些可能不会在 Valgrind 下表现出来。
当使用调试信息编译或在 valgrind 下运行时更改内存位置时,可能会隐藏分段错误。当然这并不意味着你不能使用 valgrind 来调试你的应用程序。您应该修复 valgrind 报告的所有错误,例如无效的读/写错误。修复这些错误应该可以解决您的分段错误问题。