valgrind改变了二元行为

时间:2012-02-09 11:26:10

标签: c++ valgrind

我尝试使用valgrind跟踪c ++程序中的内存泄漏。该程序使用g ++编译,可以运行而不会抛出任何错误。不幸的是,valgrind以抛出运行时错误后崩溃的方式改变了程序的行为。由于这次崩溃发生在到达代码的相关部分之前,我没有机会追踪我的内存泄漏。

附加的控制台输出说明了整个问题。

myUser@computer:~$ ./myProgram input.xml

Processing...

Finished successfully...

----------------------
Hit Enter to continue...

myUser@computer:~$ valgrind --leak-check=yes --log-file=valgrindLog ./myProgram input.xml

Processing...
myProgram-error: Not working Polymorphism. Base class method called instead of derived class method. End-of-myProgram-error.
terminate called after throwing an instance of 'char const*'
Aborted
myUser@computer:~$ g++ -dumpversion
4.4.5
myUser@computer:~$ valgrind --version
valgrind-3.6.0.SVN-Debian
myUser@computer:~$ uname -r
2.6.35-30-generic
myUser@computer:~$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"

4 个答案:

答案 0 :(得分:3)

valgrind可能正在改变代码的行为,因为你的bug比内存泄漏更严重。没有错误的可移植代码可能不会因为你用valgrind运行它而抛出异常。

答案 1 :(得分:0)

我遇到过一些问题,Valgrind在所有事情上都存在问题,这些问题暴露了之前从未出现的线程争用问题。我不认为这种事情会发生在这里吗?

答案 2 :(得分:0)

  

不幸的是,valgrind以抛出运行时错误后崩溃的方式改变了程序的行为。由于这次崩溃发生在到达代码的相关部分之前,我没有机会追踪我的内存泄漏。

这是伟大的运气。现在除了查找和修复内存泄漏之外,您还可以找到并修复错误。您是否查看了核心文件以找出代码出现故障的位置?

答案 3 :(得分:0)

非常感谢你们所有人!!!

我已经回到我的代码中来追查valgrind透露的未定义行为。最后我找到了它并且可以通过它来改进我的代码。

再次非常感谢你!