我在這樣簡單的代碼中有相當奇怪的行爲。 只要有一個模板類,副本的指針:免費()無效指針C++
template <typename T_out, typename Class_type, typename T_in> class C_Ololo{
public:
T_out (Class_type::*cxfunc) (T_in);
Class_type * obj_ref;
T_out getRef(T_out (Class_type::*func2) (T_in), Class_type * __obj)
{
cout << "GetRef in...1" << endl;
cxfunc=func2; // Segmentation fault
cout << "GetRef in...2" << endl;
obj_ref=__obj; // Segmentation fault
}
};
然後只是一些裸露類調用前一個:
class C_Temp{
public:
dcxArray1D /* double */ func (double a){
dcxArray1D /* double */ temp(1);
return temp;
}
void getResult(){
cout << "GetResult" << endl;
C_Ololo <dcxArray1D /* double */ ,C_Temp,double> * ololo;
ololo = new C_Ololo<dcxArray1D /* double */ ,C_Temp,double>();
ololo->getRef(&C_Temp::func,this);
}
};
哪裏dcxArray1D就是:
typedef vector< complex<double> > dcxArray1D;
所以 - 的問題是當我使用double
,我現在有dcxArray1D
,我沒有任何問題。但是,一旦我使用dcxArray1D
我有「分段錯誤」和free():第一類中的無效指針。
你能幫一點......
'__obj'是一個無效的名字(保留用於實現) – MSalters 2013-03-15 14:28:06
就像一個提示,而不是使用函數指針,你可能想了解更多關於['std :: function'](http://en.cppreference。 com/w/cpp/utility/functional/function)(和['std :: bind'](http://en.cppreference.com/w/cpp/utility/functional/bind))。 – 2013-03-15 14:29:16
小心向我們展示這是*使用*?可能是你正在破壞堆*或附近。正如所寫的,所有這些都佔用了源文件中的空間。 – WhozCraig 2013-03-15 14:32:35