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

关于C语言中realloc()函数对主函数数组内存影响的疑问

问题解答

代码展示

#include <stdio.h>
#include <stdlib.h>

void Increase(int *array1,int *Nums) {
    int*array2 = realloc(array1,(*Nums+1)*sizeof(int));
    array2[*Nums] = 13;
    array2[*Nums-1] = 14;
    ++(*Nums);
}


int main() {
    int NumOfElements=0,i;
    int*array=(int*)malloc(0*sizeof(int));
    Increase(array,&NumOfElements);
    for(i=0;i<NumOfElements;i++) {
        printf("%d  ", array[i]);
    }
    free(array);
}

问题解答

  1. main()函数中的数组实际包含多少元素?
    NumOfElements在Increase函数里被改成了1,main里的循环会执行1次,但这只是变量记录的“元素数”。实际上main里的array指向的还是malloc(0)分配的0大小内存块,没有有效元素,访问array[0]属于内存越界,是未定义行为(程序可能崩溃、输出乱码或出现其他异常)。

  2. Increase()函数是否会增加main()函数中数组的内存单元数量?
    不会。原因是:

  • Increase接收的array1是main中array指针的副本,realloc返回的新内存指针array2只是函数内部的局部变量,没把这个新指针同步回main里的array。
  • main里的array始终指向最初malloc(0)返回的内存块,该块大小始终是0,没有被扩容。
  • 另外Increase里的array2[*Nums-1] = 14;在*Nums初始为0时,等价于访问array2[-1],属于数组下标越界,同样是未定义行为。

内容的提问来源于stack exchange,提问作者Trương Cống Trình

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:10:28