問題タブ [bad-alloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - new による大きなメモリ ブロックの割り当て
new で大きなメモリ ブロックを割り当てる必要があります。
2 部構成のアプリケーションのプロデューサー側のモックを作成しているため、new を使用することに固執しています。実際のプロデューサー コードはこれらの大きなブロックを割り当てており、私のコードはそれらを (処理後に) 削除する責任があります。
アプリケーションがヒープから大量のメモリを割り当てることができるようにする方法はありますか? ヒープをより大きなサイズに設定できますか?
私の場合、288000 バイトの 64 ブロックです。12 個を割り当てる場合もあれば、27 個を割り当てる場合もあります。std::bad_alloc 例外が発生しています。
これは、C++、Linux 上の GCC (32 ビット) です。
c++ - このbad_alloc問題を解決する方法は?
FTPを介して対話する必要があるアプリケーションを開発しています。この通信には、現在WindowsでC ++、Visual Studio、Pocoを使用しています。
次の行では、bad_alloc例外が発生します。
だから私はダウンして最初にStreamSocketを初期化しようとしましたが、失敗します...
さらに下に行くと、bad_allocは次の場所から来ているようです。
そのコンストラクターには次のものが含まれます:(デバッガーで_pImplが初期化されていないことがわかります)
IPv4AddressImpl :: parseに含まれるもの:
Winsock2.h(ws2_32.lib)のinet_addrを含む次のコードは、「SOMETHINGELSE」になります。
ここで何が問題になっているのかわかりません...これをさらにデバッグする方法はありますか、それとも誰かが何が問題になっているのか知っていますか?
c++ - Linuxの演算子newとbad_alloc
Linuxでは、メモリが不足している場合、mallocは必ずしもnullポインタを返すとは限りません。本当にメモリが不足している場合は、ポインタを取り戻し、OOMキラーにプロセスの実行を開始させることができます。同じことがC++の演算子newにも当てはまりますか、それともbad_alloc例外が発生しますか?
c++ - Win32(vs. Linux)でのメモリ不足(?)の問題
私は次の問題を抱えています:
Windowsマシン(32ビット、3.1Gbメモリ、VC ++ 2008とmingwコンパイル済みコードの両方)で実行されるプログラムは、bad_alloc
例外がスローされて失敗します(約1.2Gbを割り当てた後、900万倍のベクトルを割り当てようとすると例外がスローされます) 、つまり約75Mb)、まだ十分なRAMが利用可能です(少なくともタスクマネージャーによると)。
Linuxマシン(32ビット、4Gbメモリ、32ビット、2Gbメモリ)で実行される同じプログラムは、約1.6Gbのピークメモリ使用量で正常に実行されます。興味深いことに、4Gb linuxマシンでwineの下で実行されたmingwによって生成されたwin32コードも、Windowsの下で実行された場合とは異なる(後の)場所ではありますが、bad_allocで失敗します...
考えられる問題は何ですか?
- ヒープの断片化?(どうすればわかりますか?これはどのように解決できますか?)
- ヒープの破損?(エラーが報告されずにpageheap.exeが有効になっているコードを実行しました。境界チェックを使用してベクトルアクセスを実装しました。これもエラーはありません。コードには基本的にポインターがなく、
std::vector
sとstd::list
sのみが使用されます。Valgrindでプログラムを実行します( memcheck)はメモリを消費しすぎて途中で終了しますが、エラーは見つかりません) - メモリ不足??? (十分なメモリがあるはずです)
さらに、Linuxバージョンが動作しているときに(そしてメモリの少ないマシンでも)Windowsバージョンが失敗する理由は何でしょうか?(/ LARGEADDRESSAWAREリンカーフラグは、効果がある場合はVC + 2008で使用されることにも注意してください)
どんなアイデアでも大歓迎です、私はこれで私の知恵の終わりにいます... :-(
c++ - CのgdbでSt9bad_allocの失敗をデバッグするにはどうすればよいですか?
私は次のように失敗するプログラムを持っています:
malloc
/と関係があると思いますfree
が、どちらかわかりません。
スタックトレースを表示できるように、エラーでブレークするgdbセットのブレークポイントは何ですか?
このプログラムはCとC++の組み合わせであり、gcc3.4.2でコンパイルされています。
c++ - 配列を割り当てるときの演算子 new の問題
C++/openGL プログラムに問題があります。
これらのようなコードのある時点で(コンストラクターです):
new は std::bad_alloc 例外をスローします。別の場所でも同じです。メモリが不足している可能性はありますか?私はそうは思わないので、あなたが私を助けることができれば、私はうれしいです! さよなら!
c++ - 値を出力しようとしたときの bad_alloc 例外
他の問題をMyMesh
コンストラクターにデバッグしました。このコードでは:
メッシュに必要な SurfacePoints と Triangles を決定しています。ブール値の「中空」と「滑らか」は、コーンに穴が必要かどうか、または法線が同じかどうかを示しますが、それは無関係だと思います。
問題は、hollow==falseの場合、何か問題がありますが、クラッシュはしません。値を配列に入れることもできますが、次のように計算しようとすると:
i=0 のときに、bad_alloc 例外をスローします。
さらに、上部のコード セグメントが演算子 new に bad_alloc をスローしたときがありましたが、その問題は自然に解決しましたが、関連している可能性があります。
誰でも私を助けることができますか?
c++ - bad_alloc の原因を見つけるためのデバッグ戦略
私のプログラムにはかなり深刻なバグがあります - new() を時々呼び出すと、bad_alloc がスローされます。
bad_alloc で見つけることができるドキュメントから、次の理由でスローされるようです。
コンピューターのメモリが不足すると (これは確実に発生していません。4GB の RAM があり、5MB 未満 (タスクマネージャーでチェック済み) を使用している場合、プログラムは bad_alloc をスローし、バックグラウンドで何も実行されていません)。
メモリが断片化しすぎて新しいブロックを割り当てられなくなった場合 (これもありそうにありません。これまでに割り当てた最大サイズのブロックは約 1KB であり、クラッシュが発生する前に 100 回以上実行されることはありません)。
これらの説明に基づいて、実際には bad_alloc がスローされる可能性のある場所はどこにもありません。
ただし、実行中のアプリケーションは複数のスレッドを実行しているため、問題の原因となっている可能性があります。すべてのオブジェクトを 1 つのスレッドでテストすると、すべてがスムーズに機能しているように見えます。ここで起こっていると私が考えることができる唯一の他のことは、同時に複数の場所で new() を呼び出すことによって引き起こされるある種の競合状態である可能性がありますが、その動作を防ぐためにミューテックスを追加しようとしました無効。
プログラムは数百行あり、問題が実際にどこにあるのかわからないため、投稿するコードスニペットがあるとしても、どのコードスニペットを投稿すればよいかわかりません。代わりに、この種のことをテストするのに役立つツールがあるかどうか、またはこの問題を解決するのに役立つ一般的な戦略があるかどうか疑問に思っていました.
私は Microsoft Visual Studio 2008 を使用しており、スレッド化には Poco を使用しています。
c++ - std::bad_alloc をスローするのではなく、メモリ不足のときにプログラムが時々セグメンテーション違反になるのはなぜですか?
さまざまなアルゴリズムを実験的に評価するように設計された、いくつかのヒューリスティック検索アルゴリズムといくつかのドメインを実装するプログラムがあります。このプログラムは C++ で記述され、GNU ツールチェーンを使用してビルドされ、64 ビットの Ubuntu システムで実行されます。実験を実行するときは、bash のulimit
コマンドを使用して、プロセスが使用できる仮想メモリの量を制限し、テスト システムがスワッピングを開始しないようにします。
特定のアルゴリズム/テスト インスタンスの組み合わせが、私が定義したメモリ制限に達しました。ほとんどの場合、プログラムは std::bad_alloc 例外をスローします。この例外はデフォルト ハンドラーによって出力され、その時点でプログラムは終了します。場合によっては、これが発生するのではなく、プログラムが単純にセグメンテーション違反を起こすことがあります。
未処理の std::bad_alloc を報告して終了するのではなく、メモリ不足のときにプログラムが時々 segfault になるのはなぜですか?
c++ - 構造体 c++ に new を使用する場合の Bad_alloc 例外
大量のメモリを割り当て、一致するドキュメントを見つけようとするクエリ プロセッサを作成しています。一致するものを見つけるたびに、ドキュメントを記述する 2 つの変数を保持する構造を作成し、それを優先キューに追加します。これを何回行うかを知る方法がないため、new を使用して構造体を動的に作成してみました。構造体をプライオリティ キューからポップすると、キュー (STL プライオリティ キューの実装) がオブジェクトのデストラクタを呼び出すことになっています。私の構造体コードにはデストラクタがないため、その場合はデフォルトのデストラクタが呼び出されると想定しています。
ただし、初めて DOC 構造体を作成しようとすると、次のエラーが発生します。
QueryProcessor.exe の 0x7c812afb で未処理の例外: Microsoft C++ 例外: メモリ位置 0x0012f5dc の std::bad_alloc..
何が起こっているのかわかりません - ヒープがいっぱいになるほど多くのメモリを使い果たしましたか? ありそうにありません。そして、そのポインターを以前に使用したことがあるかのようではありません。
まず第一に、エラーの原因となっているのは何ですか?次に、次のコードは複数回機能しますか? 作成された構造体ごとに個別のポインターが必要ですか、それとも同じ一時ポインターを再利用して、キューが各構造体へのポインターを保持すると想定できますか?
これが私のコードです:
どうもありがとう、bsg。