我在函数调用saveFile
中传递矩阵作为参数void saveFile(char raw[],char inf[],int r, int c, int m[r][c]){
FILE *save_raw,*save_inf;
int i,j;
save_raw = fopen(raw,"w");
save_inf = fopen(inf,"w");
for(i=0;i<r;i++){
for(j=0;j<c;j++){
fprintf(save_raw,"%d ",m[i][j]);
}
fprintf(save_raw,"\n");
}
我正在调用这样的函数
saveFile(image_name_extension,image_name_info,rows,columns,raw_n);
在调用函数之前,raw_n的输出是:
0 132 132 246 237
0 223 132 246 237
0 132 132 246 237
230 132 132 246 237
0 166 142 246 248
但由于某种原因,我现在不在saveFile函数中输出raw_n:
0 132 132 246 237
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
我不是一个合乎逻辑的问题,任何人都可以帮助我吗?感谢。
raw_n像这样填充
for(i=0;i<rows;i++){
for(j=0;j<columns;j++){
raw_n[i][j] = MAX_PIXEL - raw[i][j];
}
}
答案 0 :(得分:3)
在评论中,您同意传递的数组的定义与
类似int n_raw[MAX_ROWS][MAX_COLS];
两个维度均为500.但您已将该函数定义为
void saveFile(char raw[],char inf[],int r, int c, int m[r][c])
带有参数r = 5
和c = 5
的。该函数相信您所说的内容,并且错误地访问了数组。函数关于数组的唯一信息是函数参数中的内容。数组未重新排列以适合您要访问的子集。关键信息是数组中的列数,没有这些列,编译器就无法对齐每一行。
我建议你将功能定义改为
void saveFile(char raw[],char inf[],int r, int c, int m[MAX_ROWS][MAX_COLS])
甚至
void saveFile(char raw[],char inf[],int r, int c, int m[][MAX_COLS])