のベクトルへのポインタを参照解除するときに、私はクラスのクローズドハッシュハッシュテーブルを作成していると私は構造C++セグメンテーションフォールト構造
struct Example {
string key;
string data;
Example() { key = "000"; }
};
とそのポイントメンバーを含むクラスを持っています構造体のベクトル、コンストラクタ、関数を使って問題を説明します。
class hash_table {
private:
vector<Example>* hash;
public:
hash_table(int size);
void dummy_method();
};
ユーザ/ファイル入力に基づいてベクトルの構造の数を動的に割り当てることを意味します。それは「000」 10回を出力として
hash_table :: hash_table (int size=10)
{
//initialize vector
vector<Example> * hash = new vector<Example>(size);
//test objects
for(int i=0;i<size;i++)
cout<<(*hash)[i].key<<endl;
}
上記のコードでは、10人のメンバーを初期化するために表示されます。しかし
、かつて私は、私はセグメンテーションフォールトを取得
void hash_table::dummy_method() {
cout<<(*hash)[0].key<<endl;
}
をdummy_method-呼び出すことにより、これを試して
私はこれもこれを行うには正しい方法ではないかなり確信しているが、私は」永遠に探していた/私は解決策を見つけることができない。しかし、私は絶対に構造体のベクトルへのポインタを使用しなければなりません、そして、私はこれらの構造体のそれぞれを動的に割り当てることになっていると確信しています。助けてくれてありがとう。
は(も、はい、私たちは実際に名前空間を使用する必要があり、これなしSTDどこでも)
ベクトルへのポインタではなく、ベクトルを格納する必要があります。これにより、バグの範囲が縮小されます。 – juanchopanza
'htable'とはどのように定義されていますか?あなたが求めている問題を再現する完全なサンプルコードを投稿してください。それ以外の場合は、有用な答えを与えるのは難しいです。 – emlai
申し訳ありませんが、htableは大きなプログラムからのものです。問題を切り分けるために、大きなプログラムの関数を小さなプログラムにコピーしました。正しいコードを反映するように編集しました。現在のところ、これは完成したプログラムなので、問題があれば孤立させるべきです。 –