私はC++メモリ管理に関する本を読んできましたが、細部まで細かく説明しています。しかし私は私が取り組んでいるプログラムを持っている、それはいくつかの本当に大きなベクトルや配列を処理する必要があります。 私は混乱しています。私は、大文字と小文字の区別なくメモリを割り当てることに決めました。MallocがXバイトを割り当てることができない場合ReallocまたはMallocを再度使用するか? C++
私の質問は、malloc()
に一定のデータ量を試してみると何か問題が起きます。 malloc()
を再度実行してデータを割り当てようとすると、realloc()
を使用するか、malloc()
をもう一度使用しますか?私は最初のmalloc()
が失敗するので、それは愚かな質問のように聞こえると思う、それは全くmalloced取得しないだろう... ???あなたはまだそれにmalloc()
を使用することができるはずですか?
だから私はどちらを使うのですか?または、次のうちどれも使用しませんか?
BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocArray)
{
allocptr = (BYTE*)malloc(1000000);
}
// program code
free(allocptr);
または私はバイトの少ない量をしようとするrealloc()
を使用する必要があります... の代わりに、再びmalloc()
をしようと最初malloc()
が失敗した場合は?最初malloc()
はallocptr等しいNULLではないだろう250万バイトを割り当てに失敗した場合allocptrはNULLに等しかった場合は...私は上malloc()
を使用することができなかったので、私はこの質問を求めている理由はある
BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocptr)
{
allocptr = (BYTE*)realloc(allocptr, 1000000);
}
// program code
free(allocptr);
それはrealloc()
の代わりにrealloc()
がNULLに等しいポインタを取ることができないと思ったからです。
あなたは何[reallocの](HTTPについて混乱しているようです。 cplusplus.com/reference/cstdlib/realloc/)が行います。メモリブロックがない場合は、メモリブロックのサイズを変更することはできません。 – tkausl
@tkauslはい、私は読んでいた本の中で、それがNULLかそれと同等のreallocポインタを使用できないという事実に対処しました。 – MAXBD
'realloc'は2つのパラメータ(ポインタとサイズ)をとりますので、コードは機能しません。 –