2017-02-13 6 views
1

У меня возникают проблемы с заполнением 2d-массива структуры внутри структуры. Это позволяет мне делать это для пикселей [0] [1], пикселей [0] [2] .... и т. Д. Однако, как только я увеличиваю первый индекс i.e пикселей [1] [1], я получаю ошибку шины 10. Любая помощь будет оценена. Я вырезал некоторый код, чтобы сделать его более читаемым, но если вам требуется все это, дайте мне знать! То, что программа делает, это чтение изображения PPM и отображение информации, проблема, с которой я сталкиваюсь, заключается в хранении пикселей изображения.Ошибка шины 10 с 2d массивом структуры внутри структуры

#define MAX_HEIGHT 4 
#define MAX_WIDTH 4 

typedef struct Pixel{ 

    int red; 
    int green; 
    int blue; 

}Pixel; 

typedef struct PPM{ 

    char code[2]; 
    int width, height; 
    int max; 
    Pixel * pixels[MAX_HEIGHT][MAX_WIDTH]; 


}PPM; 

struct PPM * getPPM(FILE * fd){ 

    PPM * image = NULL; 

    image = malloc(sizeof(PPM)); 

    //have got all the other PPM info here ask if needed 


    int i; 
    int j; 


    for(i = 0; i<MAX_HEIGHT-1; i++){ 
    for(j = 0; j<MAX_WIDTH-1; j++){ 
     // struct Pixel newPPM_Pixel; 
     if(fscanf(fd, "%d %d %d", &image->pixels[i][j]->red, &image->pixels[i][j]->green, &image->pixels[i][j]->blue) == 3){ 
     //rgb_array[i][j] = newPPM_Pixel; 
     printf("/ %d/%d/%d", image->pixels[i][j]->red, image->pixels[i][j]->green, image->pixels[i][j]->blue); 
     } 
    } 
    } 

return image; 
} 
+2

Pixel * pixels [MAX_HEIGHT] [MAX_WIDTH]; '->' пиксельные пиксели [MAX_HEIGHT] [MAX_WIDTH]; 'или выделить его перед его использованием. – BLUEPIXY

+0

О, спасибо! Исправлена ​​проблема, которую очень ценили! – fdbdcbc

ответ

0

Изменение линии:

Pixel * pixels[MAX_HEIGHT][MAX_WIDTH]; 

к:

Pixel pixels[MAX_HEIGHT][MAX_WIDTH]; //without an asterisk 

Это способ объявить 2D массив. Если вы хотите pixels быть указателем, объявить его как это:

Pixel **pixels; 

, а затем динамически выделить память для него:

int i; 
pixels = malloc (MAX_HEIGHT*sizeof(Pixel*)); 
if (pixels == NULL) 
    printf ("Error allocating memory\n"); 
for (i = 0; i < MAX_HEIGHT; i++) 
    pixels[i] = malloc(MAX_WIDTH*sizeof(Pixel)); 
    if (pixels[i] == NULL) 
     printf ("Error allocating memory\n"); 

Вы можете прочитать больше о 2D динамического выделения памяти here.

Смежные вопросы