次のコードスニペットの出力とその理由は何ですか?char * ptr; if((ptr =(char *)malloc(0))== NULL)puts( "Gota nullポインタ");

次のコードスニペットの出力とその理由は何ですか?
char * ptr;
if((ptr =(char *)malloc(0))== NULL)
puts( "Gota nullポインタ");
else
puts( "Gota有効なポインタ");
最初に大胆な推測を行うことができます。次に、
コンパイラが次のコンパイルを試みます〜〜

手順は以下のとおりです。

#include <stdio.h>
#include <malloc.h>
int main()
{
    
    
        char *ptr;
        if((ptr = (char *)malloc(0)) == NULL)
                puts("got a null pointer\n");
        else
                puts("got a valid pointer\n");

        int a =  malloc_usable_size(ptr);
        printf("size = %d\n", a);
        return 0;
}

Mallocは長さが0のスペースに適用され、mallocは引き続きアドレスを返し、アドレススペースが残っているため、ptrはNULLに等しくありません。
malloc関数にはしきい値があります。このしきい値よりも小さいスペースを申請すると、このしきい値サイズのスペースが返されます。
しきい値が24の場合、24未満の値を適用すると、24が返されます。
結果を次
ここに画像の説明を挿入します
図に示します。このしきい値はコンパイラによって異なります。たとえば
、Ingenic mips-linux-gnu- gccをコンパイルすると、実行結果は次のようになります。
ここに画像の説明を挿入します

下の図に示すように、負の数を申請すると、戻り値は0になります。
ここに画像の説明を挿入します
これは、mallocで負の数を申請できないと規定されているためです。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_28258885/article/details/114173947