std::bad_alloc の取り扱いについて
もちろん、ここではしばらくは自分の状況を話すだけです。最近、反復時間が長く、全部で800回の反復を行うC++プログラムを実行し、1日待った後、284回目の反復でハングし、再度実行すると、また同じところでハングしてしまいました。解放されていないメモリアプリケーションがないか、いろいろと調べました(delete[])。最終的に、苦労の末、小人ベクターがぐちゃぐちゃになっていることがわかりました。
での
http://www.educity.cn/wenda/257316.html
と書かれている中で
"真実はあなたの想像を超えている、私の友人は直接メモリを食い尽くすためにベクターを使用し、それを適切にチェックアウトする
たくさんある場合は、手動でクリアしたほうがいいかもしれませんし、ベクターなしでやってみても、おそらく問題はないでしょう
ベクターは内部メモリの断片化だけでなく、外部メモリの断片化も引き起こすということが主な内容です
ベクターは連続した空間を開放します、例えばこの空間が100Mあるとします、そんな大きな連続した空間を割り当ててエラーを報告することはできません。
メモリに1Gが残っていても、連続した100Mのスペースがなければ、bad_alloc"になります。
からの抜粋です。
http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/08/2627666.html
ベクターの非常に良いまとめ
v.~ vector () と言って、すべてのデータを破棄し、メモリを解放します。
そして、別の投稿を見た。
http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html
C++のベクターは、C#のように管理されたガベージコレクション機構を持って占有メモリ空間を取り戻すことはできないが、ベクターを使い終わったら~vector()デストラクタを呼び出してメモリを解放できると書かれています。
この方法をさっそく試してみると、一発で成功!
ネットの神様に改めて感謝です
その後、またうまくいかなくなり、1200回以上の反復に走ったところでまたクラッシュしてしまいました。今度は後ろに座っていた神・阿龍に聞いてみると、一度に20万行のデータだけをベクターに読み込めば、本当に1~2メガバイトと非常に小さくなるそうです。自分で配列を開いておいて、それをクリアしないで、次からは上書きすればいいんじゃないかと言われました。お礼を言った後、変更しようとしたら、アーロンが立ち上がって、自分で開かなくてもいいから、"new vector"の行を出せばいいと言ってきました。つまり、関数内でnew vectorしているから、スタックの中のスペースしか開けず、1、2メガバイトしかないのだそうです。これは関数の外、つまりファイルスコープに置くべきで、そうすればヒープにスペースを開くことができます。
周りに神様がいる感じは、今窓の外に見える空のようで、とても眩しいです!
関連
-
C++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
undefinederror: 'dynamic_cast' の前に unqualified-id を指定する必要があります。
-
VCのグローバル変数が*.objで既に定義されている場合の問題点
-
C++ max() 関数エラー: 'max' の呼び出しに一致する関数がない
-
エラー: "***"の前にイニシャライザーがあります。
-
C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される [-fpermissive] [C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される。
-
C++: エラー C2280: 削除された関数を参照しようとしています。
-
[C++] 不完全な型へのメンバーアクセスエラー
-
C++ Error no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::string&)
-
std::allocator<char>::~allocator()' への未定義の参照
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
std::logic_error' のインスタンスを投げた後に呼び出された実行エラー終了 what(): basic_string::_S_const
-
C/C++共通エラーの概要
-
vs2015 はソースファイル stdio.h を見つけることができない 解決策
-
C++ - 文字列クラス超詳細紹介
-
C++プリントベクター
-
致命的なエラー LNK1169: 1つ以上の多重定義されたシンボルが見つかりました 解決策
-
不完全なクラス型へのポインタが許可されていないのですが、どのようなエラーですか?
-
非静的メンバ関数の無効な使用
-
C++プロジェクトのコンパイル時に再定義の多重定義問題を解決する
-
C++11 ランダムライブラリ乱数