2017-11-08 5 views
0

私は120.000ファイルを読み込んで各ファイルの各行を文字列[]に保存しなければならないプログラム(機械学習コース)をやっています。行が繰り返される場合は、辞書に追加しないでください。 私は文字列dic [100000]を宣言しました。それ以上ではなく、20,000個以下のファイルを処理することができます。 問題は、文字列dic [200000]プログラムをコンパイルしても.exeでクラッシュすると、dic [100000]、dic2 [100000]と宣言した場合と同じです。 誰も私に120.000ファイルを処理できるように適切な方法でメモリを使用する方法を教えてもらえますか?C++で文字列を使用したメモリクラッシュ

+0

ヒープに割り当てることを試してください –

+0

何が起きているのかを確認するためにコードを投稿してください。 –

+4

std :: vector を使用してください。 –

答えて

-2

おそらく、プログラムのスタックサイズを超えています。それは私が覚えている限りコンパイルするときに設定できるものです。いずれにしても、スタックの代わりにヒープを使用する必要があります。動的メモリを使用します。例:

string *dic = new string[200000]; 
... 
delete [] dic; 

このようにメモリを解放する必要がありますが、もっと多くのメモリを使用することができます。

+0

私は試してみるつもりです。 –

+5

これは悪い習慣とみなされます。本当に本当に 'string []'に固執したい場合は、 'std :: unique_ptr dic(新しい文字列[20000])'を実行しますが、 'ベクトル'を使用する方がずっと優れています。 –

+2

さらに、 'std :: deque 'を使うと、巨大な連続した割り当てを避けることができます。 –

関連する問題