【发布时间】:2020-07-17 14:56:49
【问题描述】:
以下代码是从我的原始代码中提炼出来的,它会导致分段错误。为了进一步调查,我使用了一个调试器,发现当 i=0 和 j=1 时,在*pts[i][j]=... 行发生分段错误。
当我将 *pts 替换为 a 时,它运行良好。但是,*pts 只是a 的别名,所以我认为行为应该是相同的。谁能告诉我为什么会出现这个错误?
#include<stdlib.h>
int main(){
double*** a;
int n = 3;
int m = 3;
int l = 3;
a = (double***)malloc(n * sizeof(double**));
double**** pts = &a;
for(int i=0; i<n; i++){
*pts[i] = (double**)malloc(m * sizeof(double*));
for(int j=0; j<m; j++){
*pts[i][j] = (double*)malloc(l * sizeof(double));
}
}
}
【问题讨论】:
-
我觉得有必要链接到有关成为Three Star Programmer 的页面。
-
pts[0]好的;pts[1]不,不存在(用于比较目的除外) -
OT:关于:
a = (double***)malloc(n * sizeof(double**));在 C 中,返回的类型是void*,可以分配给任何指针。强制转换只会使代码混乱并且容易出错。建议删除该演员表。 2) 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功 (==NULL) 则调用perror( "malloc failed" );,以便将您的错误消息和系统认为发生错误的文本原因传递给stderr。