Könnte mir bitte jemand sagen, warum erhalte ich einen Segmentierungsfehler, wenn ich diesen Code ausführe? Ich versuche, eine PPM-Datei mit P6-Format zu öffnen, in der zweiten Zeile gibt es ihre Dimension, in der dritten Zeile gibt es eine 255-Konstante. Unten ist ein "2D-Array" aus Zahlen, die jedes Pixel darstellen. Ich weiß, es gibt 3 Zahlen für jedes Pixel (RGB), aber ich möchte immer noch alles in 2D-Array (3 Farben von einem Pixel nebeneinander) haben (deshalb multipliziere ich die Größe [1] mit 3), aber ich bekomme einen Segmentierungsfehler.Segmentierungsfehler beim Lesen von PPM
Vielen Dank für Hilfe :)
#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 aussehen (array, Größe [0] * size [1] * 3, 1, f);' 'wird die newline' umfassen, die' Constant' (255) folgt. –
Ich bin eine Art Anfänger, können Sie mir einen besseren Weg zeigen, es zu tun? – lauderdice
Ich habe den vorherigen Kommentar geändert, nachdem ich gesehen habe, dass Sie das P6-Format verwenden. Aber Sie müssen zumindest die Daten mit dem Array ausrichten. –