-1

在如此简单的代码中,我的行为很奇怪。只需有一个复制指针的模板类:

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():头等舱中的指针无效。

能不能帮点小忙...

4

1 回答 1

0

free您显示的代码中没有调用。也没有调用malloc。这都是相当可疑的。根本原因几乎可以肯定是您正在调用free未分配给malloc.

你为什么还要使用这样的原始函数?如果您坚持使用标准 C++ 功能,整个问题可能会立即消失。

于 2013-03-15T14:31:29.947 回答