2013-01-19 22 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