2013-01-19 23 views
-8

我似乎正在得到一个非常奇怪的错误。基本上,我有一个类A,旨在管理像素数据的磁盘缓存。从主程序,我创建了一个使用的对象:“this”指针如何在类中未初始化?

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

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

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

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

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

+4

显示您的代码。 – melpomene

+0

短:它不能。长:显示代码。 – PlasmaHH

+2

你显示的两行代码之间的东西已经对'obj'变量(不一定是它指向的对象)进行了破坏。我知道找到这种错误的最佳工具是['valgrind'](http://valgrind.org/),但我不知道它是否适用于Windows。 – zwol

回答

2

In Visual Studio C++, what are the memory allocation representations?

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

在你做obj->的那一刻,你的obj未初始化。问题中的两行代码不是您真正的代码,或者两者之间有重要的事情发生。

通过使用调试器的简单步骤将给你一个问题的答案。

其中一个可能的原因是您的函数中存在2+ obj局部变量。

+0

我刚刚检查过,调用函数中只有一个对象的创建。感谢您的帮助 – user1871183

+0

它可能是'A * obj = new A(...);/*其他代码*/{A * obj;/*其他代码*/obj-> read(...)'它可以是其他任何东西,但直接在代码中的错误。 –

+0

我不这么认为。在整个应用程序中只有一个对象的创建。它的目的是成为一种单身。 – user1871183