C语言中short int内存分配疑问:64位机器返回4而非2的原因及解决
问题原因与解决办法
为什么返回4而非2?
你代码里的ptr是int*类型,sizeof(*ptr)计算的是指针指向类型的大小,也就是int的大小。在64位计算机上,int通常占4字节,所以输出4。
虽然你用malloc(sizeof(short int))分配了2字节的内存,但指针类型不匹配,导致后续的sizeof计算的不是你分配的内存块大小,而是int类型的大小。另外这么写还有风险:*ptr = 7会往内存里写4字节的数据,超出了你分配的2字节,属于内存越界,可能引发未知错误。
正确的写法
把指针类型改成short int*,这样sizeof(*ptr)就会计算short int的大小,同时避免内存越界问题:
short int *ptr; ptr = malloc(sizeof(short int)); // C标准中不需要强制转换malloc的返回值 *ptr = 7; printf("%zu\n", sizeof(*ptr)); // 用%zu输出sizeof的结果更标准,因为sizeof返回size_t类型
运行这段代码,sizeof(*ptr)就会返回2,符合short int的大小。
内容的提问来源于stack exchange,提问作者SUD pythonism
相关产品推荐
相关产品推荐

