-1
我已寫編碼和用於它函數指針,如波紋管編碼:C++:分段故障
#include <iostream>
using namespace std;
//base class
class Base1 {
public:
virtual void f() { cout << "Base1::f" << endl; }// virtual function
virtual void g() { cout << "Base1::g" << endl; }// virtual function
virtual void h() { cout << "Base1::h" << endl; }// virtual function
};
class Derive : public Base1 {
public:
virtual void f() { cout << "Derive::f" << endl; }// virtual function
virtual void g1() { cout << "Derive::g1" << endl; }
};
typedef void(*Fun)(void);
int main()
{
Fun pFun = NULL;
Derive d;
int** pVtab = (int**)&d;
//Base1's vtable
//pFun = (Fun)*((int*)*(int*)((int*)&d+0)+0);
pFun = (Fun)pVtab[0][0];
pFun();
//pFun = (Fun)*((int*)*(int*)((int*)&d+0)+1);
pFun = (Fun)pVtab[0][1];
pFun();
return 0;
}
但是,當我運行克++在Linux中的代碼,它示出了:
Derive::f
Segmentation fault
我想知道爲什麼以及如何解決它。
是什麼讓你覺得vtable在那裏? –
@JonathanPotter我讀過一些書,並告訴我! –
此代碼將不可移植。嘗試自己進入VMT是一個糟糕的主意。如果你需要一個指向方法的指針,而不是做一些花哨的事情,比如試圖通過訪問VMT來獲取指向函數的指針。 –