我通过 C 代码传递一个纯虚拟基类指针作为void *
.
当我在 C++ 中取消引用基类时,调试器能够访问它的所有成员。但是,当我尝试访问纯虚函数时,它会出现 SEGFAULTs/Access Violation。“无法在 0xc 访问内存”调试器说(当我尝试访问纯虚函数时)。
有可能在构造函数返回之前调用了函数,这有关系吗?我还应该寻找什么?所有其他变量似乎都完好无损。
代码:
the_socket_base* thisptr = reinterpret_cast<the_socket_base*>(watcher->data);
thisptr->CallPureVirtualFunction();
delete thisptr;
thisptr->CallSecondPureVirtualFunction(); //OOPS! It crashed
...
watcher->data = this; // Associate socket with the watcher (Where 'this' is the base class)
// NOTE THAT THE ABOVE ALWAYS HAPPENS IN THE CONSTRUCTOR
更新:代码部分工作,我怀疑该对象被删除。因为它运行读处理程序(它可以删除自己),然后它运行写处理程序而不检查......所以它可能就是这样。
回答
最后更新:我想澄清一下基思的评论是正确的。我正在删除一个对象并在它被删除后尝试访问它。很简单的错误!delete this;
是一个棘手的陷阱。感谢所有的评论。