C语言编程:当malloc()函数被用来申请0字节空间时,会发生什么?

当 malloc() 函数被用来申请0字节空间时,会发生什么?

// malloc_zero_memory_explore.c
#include <stdio.h>
#include <stdlib.h>

int main (void)
{       
    char   *c_ptr = NULL;
    int    *i_ptr = NULL;
    double *d_ptr = NULL;                                                                                                                                                

    c_ptr = (char *)  malloc(0);
    i_ptr = (int *)   malloc(0);
    d_ptr = (double *)malloc(0);

    printf("c_ptr = %p\n", c_ptr);
    printf("i_ptr = %p\n", i_ptr);
    printf("d_ptr = %p\n", d_ptr);
    printf("\n");
    printf("sizeof(c_ptr) = %lu byte\n", sizeof(c_ptr));
    printf("sizeof(i_ptr) = %lu byte\n", sizeof(i_ptr));
    printf("sizeof(d_ptr) = %lu byte\n", sizeof(d_ptr));
    printf("\n");
    printf("sizeof(*c_ptr) = %lu byte\n", sizeof(*c_ptr));
    printf("sizeof(*i_ptr) = %lu byte\n", sizeof(*i_ptr));
    printf("sizeof(*d_ptr) = %lu byte\n", sizeof(*d_ptr));
    printf("\n");
    printf("*c_ptr = %c\n", *c_ptr);
    printf("*i_ptr = %d\n", *i_ptr);
    printf("*d_ptr = %f\n", *d_ptr);

    return 0;
}

下面是运行的结果:
运行环境为 Ubuntu 20.04,gcc version 9.3.0

c_ptr = 0x5635a950e2a0
i_ptr = 0x5635a950e2c0
d_ptr = 0x5635a950e2e0

sizeof(c_ptr) = 8 byte
sizeof(i_ptr) = 8 byte
sizeof(d_ptr) = 8 byte

sizeof(*c_ptr) = 1 byte
sizeof(*i_ptr) = 4 byte
sizeof(*d_ptr) = 8 byte

*c_ptr = 
*i_ptr = 0
*d_ptr = 0.000000

结论:

1. 调用多次 malloc(0) 函数,返回值并不会是同一个地址空间,在上述开发环境中,相差32位的地址;
2. 此地址所指向的内存空间上的值全是0;

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James_Xue_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值