1

重複の可能性:
malloc(0)のポイントは何ですか?
malloc(0)は何を返しますか?

このコードは「失敗」と表示されますが、-1を0に置き換えると、NULLにはなりません。0メモリスペースを割り当てる方法がわかりません。役に立たないことはわかっていますが、NULL == 0Lではないので、==0にする必要があります。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr;
if((ptr = malloc(-1)) == NULL)
    printf("unsuccessful: no memory space was allocated.\n");
else{
    printf("successful: memoryspace was allocated. \n");
    free(ptr);
}
getch();
return 0;

}
4

1 に答える 1

12

それは実装定義です:

7.22.3-1

スペースを割り当てることができない場合は、ヌルポインターが返されます。要求されたスペースの サイズがゼロの場合、動作は実装によって定義されます。nullポインターが返されるか、返されたポインターがオブジェクトへのアクセスに使用されないことを除いて、サイズがゼロ以外の値であるかのように動作します。 。

したがって、戻ることはできますがNULL、戻る必要はありませ。また、失敗する理由を明確にするためにmalloc(-1)、そのプロトタイプが次のとおりであることに注意してください。

void *malloc(size_t size);
             ^^^^^^

したがって、符号なし型に変換-1しているため、非常に大きな値が生成されます。

于 2012-09-09T07:24:52.043 に答える