下面的代码片段的输出是什么,为什么? char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts(“Gota null pointer“);

下面的代码片段的输出是什么,为什么?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts(“Gota null pointer”);
else
puts(“Gota valid pointer”);
这个你可以先大胆猜测下,然后再用你的
编译器尝试着编译下~~

程序如下

#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
结果如下图所示
在这里插入图片描述
这个阈值会随着编译器的不同而不同
如,在君正mips-linux-gnu-gcc编译后,运行结果如下
在这里插入图片描述

如果申请一个负数,那么返回的是0,如下图
在这里插入图片描述
这是因为malloc规定不可以申请一个负数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_28258885/article/details/114173947