2012-04-28 20 views
1

私のコードでベクトルを使用しています。次のようにC++でのベクトルの初期化

エラーの原因となっている行がある:

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を初期化した場合:

この場合、コードは正常に動作します。 しかし、私はベクトルのオブジェクトの数が実行時に可変になるので、初期サイズを与えたくありません。 私を助けてください。私はC++で新しいです。あなたの参考のために

完全なメソッドの機能はここにある:

http://pastebin.com/2dUFEui5

+1

クラス 'Node'の大きな3つの実装の問題のようです。 'Node'の定義を教えてください。 – dirkgently

+1

'ベクトル alt_seq(1000)'は、ベクター内に1000個の 'Node'オブジェクトを作成します。これは、カウントを指定しない場合と同じではありません。あなたの 'push_back'問題は、' Node'の代入/コピーコンストラクタで考えられる問題のように聞こえます。クラスの宣言と定義を表示できますか? – birryree

+0

ところで、pastebinリンクには 'Node'クラスの定義もありません。 – dirkgently

答えて

3

あなたNodeクラスは、cfragと呼ばれるタイプCombinedFragment*のポインタ部材を有します。これにより、独自のコピー・カレントと代入演算子を定義していない場合に、ダングリング・リファレンスが作成されます。さらに、Nodecfragの割り当て/割り当て解除を担当している場合、漏れを防ぐために適切なdtorが必要です。 CombinedFragmentをディープコピーしたくない場合は、shared_ptrを使用することができます。

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

+0

私はそれを試してください...プロジェクトの他のクラスを見たい場合は、GitHub https://github.com/abhinavarora/mbt –

+1

@AbhinavAroraでコードを見つけることができます:適切なビッグ3を追加して、あなたの問題を解決してください! – dirkgently

+0

あなたが言ったように私は次のようにビッグスリーを追加しました:http://pastebin.com/g2n14awzこの追加が正しいかどうかお知らせください。上記の変更を行ったにもかかわらず、実行時エラーが発生します。助けてください。私は間違いを理解していません。 –

0

1つの問題があります。 1000 vectorオブジェクトを宣言してpush_backを実行すると、ベクターの末尾に追加されます。つまり、追加しようとしているオブジェクトは1001,1002などになります。1000を宣言すると、vectorオブジェクトに '実行時エラーが発生すると、最初に1000個のノードオブジェクトがデフォルト値を持つため、デフォルト定義が表示されます。これはエラーではなく、ロードしようとしている実際のデータと比較されるためです。お役に立てれば。

関連する問題