【发布时间】:2014-12-25 16:12:00
【问题描述】:
所以我有这个功能:
int*** loadmatrix(FILE *pimage,int height,int width) {
int ***matrix;
int control,control2,control3;
matrix=(int***)malloc(height*sizeof(int));
for (control=0; control<height; control++) {
matrix[control]=(int**)malloc(width*sizeof(int));
}
for (control=0; control<height; control++) {
for (control2=0; control2<width; control2++) {
matrix[control][control2]=(int*)malloc(3*sizeof(int));
}
}
fseek(pimage,54,SEEK_SET);
for(control=0; control<height; control++) {
for(control2=0; control2<width; control2++) {
for(control3=0; control3<3; control3++) {
matriz[control][control2][control3]=fgetc(pimage);
fseek(pimage,1,SEEK_CUR);
}
fseek(pimage,1,SEEK_CUR);
}
}
return matrix;
}
它接收一个指向 .BMP 图像文件的 FILE 指针、图像的高度和宽度,并尝试创建一个动态三维矩阵来存储每个像素的 RGB 值(忽略 Alpha 值,在.BMP)。它总是以分段错误结束,除非我在填充时注释掉第一个控制变量并将其替换为 0 (所以不是 'matrix[control][control2][control3]' 它的 'matrix[0][control2][控制3]')。
有什么想法吗?
【问题讨论】:
-
height*sizeof(int**),width*sizeof(int*) -
并且不要转换
malloc()的返回值
标签: c dynamic matrix segmentation-fault malloc