malloc()函数不按指定参数分配内存

cstdlib中的malloc(size_t_Size)函数可以给指针分配参数指定的空间,但最近遇到这么一个奇怪的问题:

#include<iostream>
#include<cstdlib>
int main(){
    typedef struct{
        short cnt;
        char str[28];
    }name;
    name *arr=(name*)malloc(sizeof(name));
    std::cout<<sizeof(name)<<'\n'<<sizeof(arr)<<'\n';//调试
    system("pause");
    return 0;
}

这是我写一个程序时发现问题后的调试,发现最后malloc并没有给arr分配sizeof(name)这么大的空间,这是Dev-C++编译器中的结果

img


右图可以看到,name的大小为30字节,但malloc只给arr分配了8字节大小的空间,这是什么原因?

arr是指针,指针是固定分配8字节大小的空间,存储指向的地址
sizeof(arr)获取的是存储指向的地址的空间大小
要获取数据的空间大小应该是sizeof(*arr)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

arr是指针,在你的系统占了8个字节,用*arr才可以返回正确结果,没有出错

arr是指针啊,指针长度都一样,一般八个字节

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632