C 三重指针

C 三重指针,c,memory,realloc,calloc,C,Memory,Realloc,Calloc,嗨,我有一个三重指针,当我的原始数组被填满时,我想重新定位它。出于某种原因,我使用realloc的方式给了我一个seg错误。有人知道为什么吗 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++){ matri

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

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
double***matrixn;
matrixn=(双***)calloc(1,sizeof(双***));

对于(i=0;i在第二个代码块的循环中,您忘记了索引
i

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

一般说明:如果使用C编译器(与C++编译器相反),不强制转换
alloc
函数族的结果。C语言规定不强制转换结果。这是一个
void*
,可以直接分配给另一个类型,而不强制转换。如果realloc失败了怎么办?您丢失了旧的矩阵n,这不是免费的()'d将因此泄漏,而下一行代码将崩溃,因为您的新matrixn为NULL。我建议将realloc的返回值存储到一个临时变量中,然后决定从那里执行什么操作。
matrixn[max_size-1][i]=(double*)calloc(4,sizeof(double));