0

有名な「std::bad_alloc」のエラーについて調べてみましたが、私のようなケースは見つかりませんでした。私はc ++でコードを実装しました(正確には、Win 7 Prof.のEclipseを使用してMinGWで実行しています)。コードは少数のクラスインスタンスでうまく動作しますが、クラスインスタンスの数が10509を超えると、からのエラーウィンドウが表示され、Eclipse で「std::bad_alloc」エラーが表示されます。「new」を使用して新しいクラスインスタンスを構築しています。各クラスには、2 つのポインターと、「long int」、「string」、および「int」型の 3 つの変数が必要です。後でノードとしてプログラムの他の部分で評価する必要があるため、以前にビルドされたインスタンスを分解することはできません。しかし、とにかくクラス定義にクラスデコンストラクターを追加しましたが、それらは確実に適切に設定されています。

新しいクラスインスタンスを割り当てるために予約メモリを拡張できるかどうか疑問に思っていますか?

コードが長すぎてここに貼り付けられません。助けてくれてありがとう!

4

1 に答える 1

2

まず、動作する動的メモリはnew通常、プロセス内の残りの使用可能なメモリをすべて占有します。これ以上伸ばす方法はありません。最初に使用した動的メモリの量は、プログラムに含まれる非動的データの量によって異なります。あなたのプログラムについてもっと知らずに言う方法はありません。非動的データのサイズを減らすことで、動的メモリとして利用できるものを効果的に「拡張」できます。

第二に、仮想メモリを備えたプラットフォームでは、「メモリ不足」になることは実際にはありません (正常なスワップ ファイルがあると仮定します)。ただし、プロセスのアドレス空間が不足する可能性があります。繰り返しますが10509、オブジェクトのみを割り当てた後にアドレス空間が不足する場合は、何か他のことが間違っているに違いありません。

第三に10509、非常に低い数字のように見えます。そのため、割り当てたオブジェクトの数が非常に少ないためにメモリが不足する場合は、オブジェクト自体がかなり大きいことを意味している可能性があります。オブジェクトの大きさは?

第 4 に、動的メモリ割り当てエラーは、ヒープの破損によって引き起こされる可能性があります。つまり、技術的にはまだ十分な空きメモリが残っていても、割り当ては失敗します。コードについて詳しく知らずに言うことはできません。

于 2013-09-15T17:41:10.577 に答える