0

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

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

关于如何调试这个问题的任何想法?我真的被困住了。

(注:这十年来一直运行良好!但现在我们正在将我们的代码从 VC6.0 迁移到 VS2005,并且它并不顺利......)

4

3 回答 3

3

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

于 2009-10-17T04:55:51.340 回答
1

我有一个与静态变量未定义的初始化顺序相关的类似问题。

于 2009-10-20T11:48:02.460 回答
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++(我也用过,而且更强大,但更难使用)

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

于 2009-11-24T05:29:22.317 回答