2012-04-21 28 views
1

C++でのunsignedのリストのベクトルを作る。私はそれがポインタになると無知ですが、私は、リストへのポインタを保持するとしてベクトルを宣言する必要があると思う。C++のnoobがsegフォールトを受け取る

これはちょうど災難です。それがまったくコンパイルされれば、私はseg faultsを得る。

ファイルが読み込まれるまで(最初の行にあるはずです)、どのくらいの大きさのベクトルがあるかわからないので、リストがどれだけ大きくなるか分かりませんファイル。

リストのベクトルを宣言する方法に関するアイデアはありますか?私はそれを得ると、残りの部分を見つけ出すことができると思います。(そうではないかもしれませんが、もっと近づくでしょう)。どうも。

+4

'ベクター<ベクター>'は良いスタート地点になります。コード内にポインタを使用しなくても、このプログラム(またはここで説明する部分)を書くことができます。 –

+0

@ JamesMcNellisのように、 'list''の' 'unsigned int''の' 'vector''はうまくいくはずです。これが本当にコードの問題セクションである場合、範囲外の範囲にアクセスしている可能性があります(たとえば、ベクトルの長さの最後を過ぎた演算子[]を使用して)。 – tmpearce

+0

この場合、代わりに 'at'を使用すると保証されます。 – chris

答えて

2
  • クラッシュの場所をトレースするためにデバッガを使用します。

  • 生ポインタのベクトルを決して作成しないでください。あなたが絶対にポインタのベクトルを持っている必要がある場合のみ、スマートポインタを使用してください。

  • ベクターはメモリ管理とサイズ変更を行います。

    vector<list<TYPE> > vecOfLists; //empty
    vecOfLists.push_back (some_list); //add new list onto the back

あなたは通常の配列の代わりにリストを使用している場合は、代わりにベクトルのベクトルを使用したほうが良いかもしれません。

+0

私は家に帰ったばかりですが、私はまだ試していませんが、私はこれらの答えが好きです。 vecOfListsについては、2行目に空のリストを追加していますが、ファイルの各エントリが新しいリストを必要とするか、私が作成したリストに追加するかは事前に分かりません。 。少なくとも私はそれを動作させる方法を知らない...うーん。 – punstress

+1

新しいリストが必要な場合は、 'vecOfLists.push_back(the_new_list);'を使用してください。 'vecOfLists [index_of_list_to_add_onto] .push_back(additional_element);' – chris

+0

をn回ループして各nの空リストを作成することができます(これはファイルの先頭にあります)。正しいリストに追加してください。ファイルの各行には、残りの行を入れるリストのインデックスを示す初期値があります。同じインデックスの行が複数ある可能性があります。そのリストにアクセスする方法を理解する必要があります...エントリが "index addx"の場合、vecOfLists [index] .push_back(addx)のようなものでしょうか? – punstress

関連する問題