-1

コードのメモリ要件が高く、このステートメントが何度も繰り返されます。

Node** x;
x = new Node*[11];

この割り当てでは失敗します。コンソールに出力を投げて、この行を見つけました!

Visual Studio でコードをビルドしています。デバッグ モード (VS2005 と VS2008 の両方) では正常に動作しますが、VS2005 リリース モードではエラーがスローされます。cl Program.cpp から生成された直接の exe は、cl が VS2010 の場合は機能しますが、VS2005 の場合は失敗します。手がかりはありますか?

PS: Linux は、同じ感謝に対してバス エラー (コア ダンプ) を返します。

更新:そして、私が理解しているように、それは「整列していない」ことが原因である可能性があります。11から12(または任意の偶数)を作成したところ、うまくいきました!!! どうしてか分かりません。奇数では通用しません!

更新 2: http://www.devx.com/tips/Tip/13265 ?

4

4 に答える 4

4

プログラム ヒープを破損する何かをどこかで行ったと思います。たとえば、割り当てられたメモリ チャンクの末尾を超えて書き込みを行ったり、メモリ チャンクが解放された後にメモリ チャンクに書き込みを行ったりしました。

問題を診断する最も簡単な方法は、 valgrindなど、この種の問題を検出することを目的とした一種のデバッガーを使用してソフトウェアを実行することをお勧めします。

于 2009-11-08T20:04:17.350 に答える
2

有効な C++98 実装は、クラッシュだけでなく、割り当てが失敗した場合に例外 (std::bad_alloc) をスローします。以前の回答に同意し、プログラムを valgrind で実行することをお勧めします。これは、メモリ破損の悪臭を放つためです。Valgrind は、選択した Linux ディストリビューションで利用できるはずです。

于 2009-11-08T21:16:28.640 に答える
2

コードのメモリ要件が高い

本当にメモリ不足ですか?

x = new Node*[11];

x次のように削除していますか?

delete [] x;   // the correct way

また:

delete x;  // incorrect

または、単にヒープを破損している何かが他にある可能性もありますが、デバッグ モード モードで実行すると、それほど明白ではなく、より明白になると予想していました。しかし、ヒープの破損に関しては、デバッグしやすい方法でヒープが破損するという保証はほとんどありません。

于 2009-11-08T20:06:12.417 に答える