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

在其他函数中使用指针的指针调用realloc扩容数组失败,求解决

问题分析与解决

你的代码核心问题出在运算符优先级上:[]的优先级高于*,所以*data[4]会被解析成*(data[4])——这相当于去访问data这个二级指针的第5个元素(直接越界),再解引用,完全不是你想要的操作。

正确的写法应该是(*data)[4],先通过*data拿到指向数组的一级指针,再用[4]访问数组的第5个元素。

修正后的完整代码:

#include <stdio.h>
#include <stdlib.h>  // 必须包含该头文件,malloc/realloc/free都依赖它

void push(int** data)
{
    // 用临时变量接收realloc结果,避免分配失败时丢失原指针
    int* temp = (int *)realloc(*data, 5 * sizeof(int));
    if (temp == NULL) {
        fprintf(stderr, "内存分配失败\n");
        exit(1);
    }
    *data = temp;
    (*data)[4] = 100;  // 修正运算符优先级问题
}

int main() {
    int *array = (int *)malloc(2 * sizeof(int));
    if (array == NULL) {
        fprintf(stderr, "内存分配失败\n");
        exit(1);
    }

    push(&array);

    printf("%d", array[4]);  // 现在能正确输出100

    free(array);
    return 0;
}

额外补充两个关键细节:

  • 务必包含<stdlib.h>,否则内存操作函数的声明缺失会引发未定义行为。
  • 不要直接将realloc结果赋值给原指针,一旦分配失败返回NULL,会丢失原有内存地址造成泄漏,先用临时变量接收并校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:33:26