1

G ++を使用してUbuntu 12.10でこのコードを実行しようとしています。

NodeFeature *feature_all;    
NODE_NO = 20449;    
feature_all = new NodeFeature[NODE_NO];

メッセージが表示されますSegmentation FaultNodeFeatureは構造体です:

struct NodeFeature
    {
        int len; //length of vector
        double *val; //vector of observational features
        int *index; //vetor of indexes of features
        int *label_start; //array indexes of the starting point for each label
        int *label; //the labels being activated at this node
    };

何が問題ですか?どうすれば修正できますか?

編集: コード全体とデータを確認してテストする必要がある場合は、両方ともここで入手できます: http://vietlabs.com/crf-sl/

4

2 に答える 2

0

feature_all宣言されている型は?
そのはず:

NodeFeature *feature_all;
于 2013-08-04T13:05:39.917 に答える
0

4 GBデータを動的に割り当てようとしています。詳細については、このリンクを参照してください。限られた割り当てサイズ C++

これは、メンバーSeqFeature::OB_F_MAXが初期化されておらず (負の値であることが判明)、この値が に割り当てられているために発生しています。これSeqClassifier::OB_F_SIZEは、関数内の計算に使用SeqClassifier::initParamされ、巨大な正の値に変換され、これがdouble配列を動的に作成するためのサイズ。

簡単に言うと、 の初期化されていない値によりOB_F_MAXsize配列の が非常に正の値になります。これは、オペレーターに渡される巨大なnew正の値であり、サイズが約 4 GB になります。

また、32 ビット x86 システムでは、上記のリンクで指摘されているように、メモリを要求することも、メモリを4 GB要求することさえできないことに注意してください。3 GB

于 2013-08-04T13:39:24.953 に答える