1

コードでベクトルを使用しています。

エラーの原因となっている行は次のとおりです。

vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }

この線 :

 alt_seq.push_back(temp_node);

実行時エラーを引き起こします。ただし、次のように初期サイズでベクターを初期化すると:

vector<Node> alt_seq(1000) ;

この場合、コードは正常に機能します。ただし、ベクター内のオブジェクトの数は実行時に可変になるため、初期サイズを指定したくありません。私を助けてください。私はC++が初めてです。

参考までに、完全なメソッド関数は次のとおりです。

http://pastebin.com/2dUFEui5

4

2 に答える 2

3

クラスには、というNode型のポインター メンバーがあります。独自のコピー ctor と代入演算子を定義していない場合、これによりダングリング参照が作成されます。さらに、が割り当て/割り当て解除を担当する場合は、リークを防ぐために適切な dtor が必要です。ディープコピーしたくない場合は、.CombinedFragment*cfragNodecfragCombinedFragmentshared_ptr

また、デフォルトの ctor はNodeおそらくそこにある必要さえありません (cfrag初期化されていない状態になります)。

于 2012-04-28T21:31:30.907 に答える
0

問題が 1 つあります。vector1000 個のオブジェクトを宣言しpush_backてから、ベクトルの最後に追加する場合、つまり、追加しようとしているオブジェクトは 1001、1002.... などにあります。1000 個vectorのオブジェクトを宣言しても得られない場合実行時エラーが発生した場合、まずデフォルトの定義を確認します (最初の 1000 個のノード オブジェクトにはデフォルト値があるため)。これはエラー アウトではないため、ロードしようとしている実際のデータと比較します。お役に立てれば。

于 2012-04-29T02:22:16.347 に答える