gpt4 book ai didi

c - 使用三维动态矩阵时的分割错误

转载 作者:行者123 更新时间:2023-11-30 15:28:22 25 4
gpt4 key购买 nike

所以我有这个功能:

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]')。

有什么想法吗?

最佳答案

您的代码假设 sizeof(<pointer>) == sizeof(int) 。但情况并非总是如此,尤其是在 64 位平台上。这就是为什么您应该使用类似 matrix=malloc(height*sizeof(int**)); 的调用进行分配。而不是你拥有的。我想检查 fseek() 的 retval和malloc()也会有帮助 - 至少放上assert(),这样你就会知道它是有效的。

关于c - 使用三维动态矩阵时的分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com