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

C语言使用malloc、realloc动态内存分配时指针大小不变原因咨询

问题原因

  • 你对sizeof运算符的作用存在误解:sizeof计算的是变量本身占用的内存大小,你代码里的ptr是int*类型的指针变量,所以sizeof(ptr)得到的是指针本身的大小,和它指向的动态内存块大小没有任何关联。
  • 指针变量的大小仅由程序运行的系统架构决定:64位系统下所有类型的指针大小都是8字节,32位系统下为4字节,所以无论你用malloc申请多大的内存、后续是否用realloc扩容,打印的sizeof(ptr)结果都不会变。
  • 补充说明:C语言标准没有提供原生接口可以直接获取动态分配内存块的总大小,如果需要用到申请的内存容量,需要你自己额外定义变量存储申请的字节数或者元素个数。

参考修正代码

如果要正确打印你申请的动态内存大小,可以参考如下写法:

int *ptr;
// 自定义变量存储申请的元素个数,同步维护即可
size_t arr_len = 5;
ptr = (int*)malloc(arr_len * sizeof(int));
printf("current size is %ld\n", arr_len * sizeof(int));

for (int i = 0; i < 5 ; i++)
{
    ptr[i] = i + 1;
}
    
for (int i = 0; i < 5 ; i++)
{
    printf("%d\n",*(ptr + i));
}

// 扩容时同步更新长度变量
arr_len = 10;
ptr = (int*)realloc(ptr, arr_len * sizeof(int));

printf("new size is %ld\n", arr_len * sizeof(int));
   
for (int i = 0; i < 5 ; i++)
{
    printf("%d\n", *(ptr + i));
}

内容的提问来源于stack exchange,提问作者Themisba7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:39:03