有沒有人可以告訴我爲什麼在運行此代碼時遇到分段錯誤?我試圖用P6格式打開一個PPM文件,第二行有它的維度,第三行有一個255常量。 下面是代表每個像素的數字的「二維數組」。我知道每個像素(RGB)有3個數字,但我仍然希望將它全部放在二維數組中(一個像素相鄰的三種顏色)(這就是爲什麼我將size [1]乘以3),但是我我正在分段錯誤。閱讀PPM時出現分段錯誤
感謝您的幫助:)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
int main(int argc, char*argv[]){
char *fname = argv[1];
FILE* f = fopen(fname, "r");
char format[3];
int size[2];
//reading image format
fscanf(f,"%s", format);
printf("%s\n", format);
//reading size
fscanf(f,"%d %d", size, size+1);
printf("%d %d\n", size[0], size[1]);
//reading a constant - 255
int Constant=0;
fscanf(f,"%d", &Constant);
//mallocating a 2D array to store individual pixels
uint8_t **array=malloc (3*size[1]*size[0]*sizeof(uint8_t));
//reading pixels from file and storing into array
for(int i=0 ; i<size[1]; i++){
for(int j=0 ; j<size[0]*3 ; j++){
fread(array, size[0]*size[1]*3 , 1, f);
}
}
for(int k=0;k<size[1];k++){
for(int l=0; l<size[0]*3; l++){
printf("%d ", array[k][l]);
}
printf("\n");
}
return 0;
}
'的fread(數組,大小[0] *尺寸[1] * 3,1,F);'將包括'newline'下面'Constant'(255)。 –
我是一個初學者,你能告訴我一個更好的方法嗎? – lauderdice
在看到您使用P6格式後,我更改了以前的評論。但是你至少必須將datya與數組對齊。 –