2012-03-19 6 views
5

私はC++とプログラミングには新しく、割り当ての一部として小さなプログラムを作成していますが、コードをより速く実行しようとしています。私のベクトルに構造体へのポインタを格納させようとしています。ポインタ、文字列、オーバーフローエラー

構造体は

struct info { 
    string all; 
    string word; 
} 

そして、私は、「すべて」の文字列を割り当てる値をしようとしていたなかったです。

info* v; 
v->all = str; 

とstrが

string str = "Hello"; 

私はGDBだったランニング時になったエラーとして定義されます。

File "/usr/share/gdb/python/libstdcxx/v6/printers.py", line 469, in to_string 
return self.val['_M_dataplus']['_M_p'].string (encoding, length = len) 
OverflowError: signed integer is greater than maximum 

これを引き起こしている可能性のある手がかりはありますか?

答えて

2

vは初期化されません。

info* v = new info; 
v->all = str; 

くださいしかし、あなたは本当に多くのコードが表示されるはずです。明確ではないが、何をしようとしているのか、ポインタを格納することでコードをより速く実行できるようになる。

+0

を使用し、約覚えて 'それが不要になった場合、v'を削除しません。 –

+0

ありがとうございます。私は意図的に '*'を追加し、 'new'について忘れてしまいました... – michcs

1

info* v;だけあなたはinfoにメモリを割り当て、このメモリへのこのポインタポイントを作成する必要があり、それを使用するために、いくつかのランダムメモリ位置を指しているポインタを定義します。これはnewのようにinfo* v = new info();のようにすることができます。 delete v;を実行してメモリを解放する必要があることに注意してください。

0

割り当てられていないメモリ位置は使用できません。 info *vはメモリ位置へのポインタのみを作成し、現在はその位置を迷惑メールとしています。 newを使用してメモリを割り当てる必要があります。 newの後には、strを使用して値を割り当てます。

か、また、スタティックメモリの割り当て