以下のコードは、Windowsで実行するとアドレスを返しますが、NULLを返すと予想しています。Windowsでmalloc(0)がnull以外のアドレスを返すのはなぜですか?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
このようなmallocの実装を促すものはありますか?それの背後に何らかの理由がありますか?
これは0バイトのメモリなので、データの書き込みは試行しませんでした。しかし、この記憶は何のためにも使えますか? comp.lang.cよくある質問の中に答えています
+1私が実際に見たように、1人は、malloc'd/realloc'dメモリを非常に大きくする可能性のあるループ内の何かを特殊なケースに入れたくないときに、この "利点"にこれを使用します。 – JimR
しかし、あなたは 'realloc'にヌルポインタを渡すことができます。だから、このトリックは決して必須ではありません。ちょうど同様に 'void * p = 0;'でも構いません。 –
@スティーブそれは本当にトリックではありません。これは、プログラミングやルーズなプラットフォーム仕様の成果物です。テストがなければ、HeapRealloc(heap、HEAP_REALLOC_IN_PLACE_ONLY、0、4)がどのように動作するかは不明です。 – ActiveTrayPrntrTagDataStrDrvr