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



所以我有这个函数:

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")。除非我在填充第一个控制变量时注释掉它并将其替换为0,否则它总是以分段错误告终(因此,它的"matrix[0][control2][control3]"不是"matrix[control2][control[3]",而是"matrix[0][control2][control 3]")。

有什么想法吗?

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

相关内容

  • 没有找到相关文章

最新更新