无法访问使用CONTAINING_RECORD检索的实例中的虚函数

时间:2011-09-19 00:51:32

标签: vtable

我正在使用C ++进行Windows编程,代码如下:

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

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

我使用LIST_ENTRY创建了一个B对象的双链表,并试图通过以下方式访问此列表中的元素:

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检索的指针无法调用虚函数。可能有什么不对?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

从我在代码中看到的内容,CONTAINING_RECORD返回一个无效指针。向我们展示它的代码。 Func2 wprks只是偶然,因为它不依赖于这个指针,但仍然是非法的。