C ++头文件中定义的方法问题

时间:2009-10-17 04:47:47

标签: c++ declaration definition

我在DLL中有一个类,用于许多其他DLL和EXE。它有一些在include文件中定义的方法(即方法体在.h文件中),它包含在其他二进制文件中。其中一个是给我合适的:int GetVersion() { return nVersion; }

总是返回-842150451,但是当我在调试器中运行并查看类成员变量时,nVersion100

有关如何调试此问题的任何想法?我真的被卡住了。

(注意:这已经运行了十年了!但现在我们正在将代码从VC6.0移到VS2005,并且它一直没有顺利......)

3 个答案:

答案 0 :(得分:3)

十六进制中的值看起来像0xCDCDCDCD,它通常是调试版本中未初始化的内存。你确定nVersion已经初始化了吗?

答案 1 :(得分:1)

我遇到了与静态变量未定义的初始化顺序相关的类似问题。

答案 2 :(得分:0)

所以,如果我关注你,你就会得到以下内容:

clas=new MyClass();
// some other code executes

clas->SetVersion(100);
/// some other code executes...
/// one line before, nVersion is fine.
int n=clas->GetVersion(); ///< this is where it all goes wrong

(我会发布评论,但不会格式化代码)

我还假设您确定clas的指针不会以某种方式被破坏但指向可读/可执行内存。 (这会使事情变得很糟糕)

至于帮助您调试此工具的工具,请尝试使用内存分析工具,例如Compuware DevPartner内存分析器。其他需要研究的内容包括Purify,Insure ++(我也使用过,功能更强大,但更难使用)

这些工具可以快速提醒您易于制作,但很难找到内存错误。