2011-09-19 52 views
0

檢索一個實例,我使用具有C++編程窗口和具有下面的代碼:不能訪問虛擬功能在使用CONTAINING_RECORD

class A 
{ 
public: 
    virtual void Func1() {} 
    void   Func2() {} 
} 

class B : public A 
{ 
public: 
    __override virtual void Func1() {} 
} 

我提出使用LIST_ENTRY乙對象的雙重鏈表並試圖訪問在一個元件這個名單如下方式:

LIST_ENTRY * pEntry; // I got this pointer using RemoveHeadList 
A   * pA; 
pA = CONTAINING_RECORD (pEntry, A, m_le); 
pA->Func2();   // works fine 
pA->Func1();   // Access violation 

正如你看到的,使用CONTAINING_RECORD檢索的指針不能調用虛函數。什麼可能是錯的?謝謝你的幫助。

回答

0

從我所看到的代碼中,CONTAINING_RECORD正在返回一個無效的指針。告訴我們它的代碼。 Func2 wprks只是偶然的,因爲它不依賴於這個指針,但仍然是非法的。

+0

[此鏈接](http://stackoverflow.com/questions/2247270/access-violation-exception-when-calling-a-method)指出我正確的方向,我發現對象A的內存檢索在我訪問此元素之前,CONTAINING_RECORD已被覆蓋。感謝您的輸入。 – jiangok