You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:36:18