虚表结束的节点的值(0)为什么不能被直接cout出来
class Base{ public: virtual void f(){cout<<"Base::f"<<endl;} virtual void g(){cout<<"Base::g"<<endl;} virtual void h(){cout<<"Base::h"<<endl;} };int main(int argc,char **argv){ typedef void(*Fun)(void); Fun pfun=NULL; Base b; cout<<"虚表地址:"<<&b<<endl; cout<<"虚表中第一个函数的地址:"<<*(int*)(&b)<<endl; //cout<<"虚表结尾:"<<*((int*)*(int*)(&b)+3)<<endl; //error int m=*((int*)*(int*)(&b)+3); cout<<m<<endl; //ok}
cout<<"虚表结尾:"<<*((int*)(&b)+3)<<endl; //error
[解决办法]
太高端了这个。
[解决办法]
虚表地址:0030FACC
虚表中第一个函数的地址:10319932
虚表结尾:0
0
我的是可以打印的呀
[解决办法]
我上边不是回答了么……你把
cout<<"虚表结尾:"<<*((int*)*(int*)(&b)+3)<<endl; //error
改成
cout<<"虚表结尾:"<<*((int*)(&b)+3)<<endl; //error
就可以了啊