访问简单的vtable(虚函数表),不成功.我的程序错在哪里?
我想用一个小程序探索一个虚函数表的性质。
通常gcc/vc编译器都把多态对象的第一个函数作为虚函数表的指针。那么我把一个对象指针,强转成指向虚函数表(数组)的指针,再通过该指针来直接调用一个类的成员函数:
运行到函数调用的这个语句的时候,程序core dump了。
我的程序错在哪里?
通常gcc/vc编译器都把多态对象的第一个函数作为虚函数表的指针。那么我把一个对象指针,强转成指向虚函数表(数组)的指针,再通过该指针来直接调用一个类的成员函数:
typedef void (*pf)();
struct C
{
virtual void f(){
printf("weird\n");
}
};
int main()
{
C c1;
C* p=&c1;
pf* pvtable=(pf*)p;
pf func1=pvtable[0];
(*func1)();
return 0;
}
运行到函数调用的这个语句的时候,程序core dump了。
我的程序错在哪里?
...全文
相关推荐
vtable 虚函数表
vtable 虚函数表 更加有效的理解虚函数
博客虚函数表的作用.rar
博客《Cpp 对象模型探索 —— 虚函数表作用》中图片的原版文档,网址:https://blog.csdn.net/itworld123/article/details/102894752 。
c++虚函数与虚函数表
学习 C++ 的同志不知道有没有和我一样遇到过这样的困惑:C++中的虚函数到底怎么实现的?在各种继承关系中,虚函数表的结构到底是什么样的?曾经我是很想当然,可是后来在使用ATL的过程中,我发现并不是我想的那样。大家知道,利用C++语言本身的特性进行COM编程当然是很方便的事,但是你就得随时随地都知道那虚函数表里头到底是些什么东西。讲C++语法的书没有义务告诉你C++产生的虚函数表是什么样的,这就是头痛的所在。 自已做试验是件很快乐的事,我很愿意这么做。
C++虚函数及虚函数表解析
C++虚函数及虚函数表解析,内容详细,分析清晰,推荐给大家。
vtable.rar
c/c++ 简单回调实例,回调函数本质上提供了一种与常规的上层调用下层代码相反的模式,使得底层代码也有机会反调高层的代码,这大大提升了代码的能力。简单明了。


