【问题标题】:realloc a triple pointer重新分配三重指针
【发布时间】:2013-01-07 11:21:41
【问题描述】:

嗨,我有一个三重指针,当我的原始数组被填满时,我想重新分配它。出于某种原因,我使用 realloc 的方式给了我一个段错误。有人知道为什么吗?

double ***matrixn;
matrixn=(double***) calloc(1,sizeof(double **));
for(i=0;i<1;i++){
    matrixn[i]=(double**)calloc(3,sizeof(double*));
    for(j=0;j<3;j++){
        matrixn[i][j]=(double*)calloc(4,sizeof(double));
    }
}

max_size=1

下一部分发生在循环内:

max_size+=1;

matrixn=realloc(matrixn,max_size*sizeof(double**));
matrixn[max_size-1]=(double**)calloc(3,sizeof(double*));

for (i=0;i<3;i++){
matrixn[max_size-1]=(double*)calloc(4,sizeof(double));
}

谢谢

【问题讨论】:

  • 一般说明:如果使用 C 编译器(相对于 C++ 编译器),请勿转换 alloc 系列函数的结果。
  • 这是 C 语言中的一项规定,您不要强制转换结果。它是一个void*,可以直接分配给另一个类型而无需强制转换。
  • 如果 realloc 失败会怎样?您丢失了旧矩阵,它不是 free()'d 并因此会泄漏,并且下一行代码崩溃,因为您的新矩阵为 NULL。我建议将 realloc 的返回值存储到一个临时变量中,然后决定从那里做什么。

标签: c memory realloc calloc


【解决方案1】:

在第二个代码块的循环中,您忘记了索引i。它应该看起来像

matrixn[max_size-1][i]=(double*)calloc(4,sizeof(double));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2021-05-13
    相关资源
    最近更新 更多