-8

我似乎遇到了一个非常奇怪的错误。基本上,我有一个 A 类,用于管理像素数据的磁盘缓存。在主程序中,我使用以下方法创建 A 的对象:

A* obj = new A(...);

然后,我调用一个从磁盘读取像素的方法:

Pixel pix = obj->read(...);

但是,当我尝试使用“this”指针从 read() 方法中访问 A 的私有成员变量时,我收到访问冲突错误,因为“this”指针未初始化(MSVC 2012 设置为 0xCCCCCCCC)。但是,我检查了构造函数返回的“obj”指针的值,它似乎是一个有效的地址。

我的猜测是构造函数以某种方式失败了,但是为什么它会返回一个指向对象的指针呢?或者,如果构造函数没有失败,为什么“this”指针在类中未初始化?

4

1 回答 1

2

在 Visual Studio C++ 中,内存分配表示形式是什么?

  • 0xCCCCCCCC :被微软的 C++ 调试运行时库用来标记未初始化的堆栈内存

在你这样做的那一刻obj->,你的obj还没有初始化。问题中的两行代码不是您的真实代码,或者中间发生了一些重要的事情。

简单地逐步使用调试器将为您提供问题的答案。

可能的原因之一是obj您的函数中有 2 个以上的局部变量。

于 2013-01-19T22:49:34.520 回答