-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 に答える