2015-06-18 76 views
0

我得到這個奇怪的錯誤,我從閱讀私有類級別的值(無指針)獲取訪問衝突。從私有成員值類型(布爾)讀取訪問衝突

HRESULT WindowedSinkRenderer::Initialize(IMLTeeSink3 *sink) 
{ 
    std::cout << "Test\n"; 

    // exception throw here 
    std::cout << "Test" << _isInitialized << "\n"; 

    std::cout << "Test\n"; 

    return S_OK; 
} 

這裏是我的頭

class WindowedSinkRenderer 
{ 
public: 
    WindowedSinkRenderer(); 
    ~WindowedSinkRenderer(); 

    HRESULT Initialize(IMLTeeSink3 *sink); 
    HRESULT Deinitialize(); 
    HRESULT SetRenderOwner(HWND handle); 
    HRESULT SetRenderDimensions(int width, int height, bool fillVideo); 
    HRESULT GetCurrentImage(BITMAPINFOHEADER* bitmapHeader, BYTE** data, DWORD* size, bool* bufferHasInfoHeader); 

private: 

    DWORD _remoteGraphRegister; 
    SmartPtr<IGraphBuilder> _graphBuilder; 
    SmartPtr<IFilterGraph2> _filterGraph; 
    SmartPtr<IMediaControl> _mediaControl; 
    WindowedVideoRenderer* _videoRenderer; 

    bool _isInitialized; 

}; 

這裏是我的構造函數在那裏事件BOOL初始化爲false。

WindowedSinkRenderer::WindowedSinkRenderer() : _isInitialized(false) 
{ 

} 

什麼給?爲什麼錯誤?

0xC0000005: Access violation reading location 0xCDCDCDE1. 
+0

請顯示代碼您在哪裏調用'WindowedSinkRenderer :: Initialize()' –

+1

0xcdcdcdcd模式是未初始化內存的典型模式(請參閱例如[此頁供參考](https://msdn.microsoft.com /en-us/library/aa260966%28v=vs.60%29.aspx))。 「0xCDCDCDE1」看起來像是來自未初始化指針的偏移量。 –

+0

@JoachimPileborg這是一個指向WindowedSinkRenderer的無效指針。它拋棄了我,因爲我仍然可以在方法中執行代碼,前提是我將該方法視爲靜態方法(不訪問實例成員)。 –

回答

1

它看起來像你用一個無效的指針調用Initialize到一個WindowedSinkRenderer對象。

+0

就是這樣!我被拋棄了,因爲我可以在事實上調試INTO方法。 因此,如果將此「實例」方法視爲「靜態」,那麼對無效指針使用方法是有效的?不建議這樣做,只是有趣的知道。 –

+0

直到您嘗試訪問成員變量時,纔會實際使用無效指針。 –