1

高解像度画像の申請をしました。

大量のメモリを割り当てたい場合、システムは「アプリケーションがランタイムに異常な方法でそれを終了するように要求しました」と言います。しかし、私が欲しいのは、割り当てられたポインタがメッセージを表示できる0またはNULLを返す必要があるということです。ゼロ/NULLを返さないのはなぜですか?何か案が?MessageBoxに進む前に、デバッグで確認しましたが、このエラーが発生します。私のメッセージを表示するためにここで何をしますか?

そして、ユーザーがコンピューターのPC容量よりも十分な大きさのメモリを割り当てようとしていることを確認する方法はありますか?

ありがとう。

ImageW = 2000;
ImageH = 2000;
point *Img = NULL;
Img = new point[ImageW*ImageH];
if(Img== NULL)
{   
MessageBox(0, "Your computer memory is too small.", "Error", MB_ICONERROR | MB_OK);
return; 
}
4

3 に答える 3

5

失敗時にmalloc戻るCとは異なり、 C ++では、表示されているstd::bad_alloc例外をスローする可能性があります。参照用にhttp://en.cppreference.com/w/cpp/memory/new/operator_newを参照してくださいNULLnew

この例外を処理するには、try/catchを使用できます。

try {
    Img = new point[ImageW*ImageH];
}
catch (std::bad_alloc const& e) {
    // handle failure here, like displaying a message
}

std::bad_alloc例外のドキュメントは次のとおりです:http: //en.cppreference.com/w/cpp/memory/new/bad_alloc

于 2012-10-16T01:54:44.940 に答える
5

nothrowを使用してください:

Img = new (nothrow) point[ImageW*ImageH];
//        ^^^^^^^^^^

これで、割り当てが失敗した場合に、例外ではなくnullポインタを取得します。

于 2012-10-16T01:59:07.700 に答える
0

C ++の「new」は失敗時にnullを返さず、newハンドラーを呼び出します。

于 2012-10-16T01:55:51.040 に答える