我通过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;
是一个棘手的陷阱。感谢所有评论。
答案 0 :(得分:2)
没有代码,很难说。两种可能性OTOH:
答案 1 :(得分:0)
delete this; // Is dangerous, use with care
我在做的是删除这个;在纯虚函数中,立即返回,然后在已删除的对象上调用另一个纯虚函数。