我在DLL中有一个类,用于许多其他DLL和EXE。它有一些在include文件中定义的方法(即方法体在.h文件中),它包含在其他二进制文件中。其中一个是给我合适的:int GetVersion() { return nVersion; }
。
总是返回-842150451
,但是当我在调试器中运行并查看类成员变量时,nVersion
为100
。
有关如何调试此问题的任何想法?我真的被卡住了。
(注意:这已经运行了十年了!但现在我们正在将代码从VC6.0移到VS2005,并且它一直没有顺利......)
答案 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 ++(我也使用过,功能更强大,但更难使用)
这些工具可以快速提醒您易于制作,但很难找到内存错误。