Ошибка шины 10 с двумерным массивом структуры внутри структуры

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

#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;
}

person Community    schedule 13.02.2017    source источник
comment
Pixel * pixels[MAX_HEIGHT][MAX_WIDTH]; --› Pixel pixels[MAX_HEIGHT][MAX_WIDTH]; или выделить его перед использованием.   -  person BLUEPIXY    schedule 13.02.2017
comment
ООО Спасибо! Устранена проблема, которая очень ценится!   -  person    schedule 13.02.2017


Ответы (1)


Изменить строку:

Pixel * pixels[MAX_HEIGHT][MAX_WIDTH];

to :

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

Это способ объявить двумерный массив. Если вы хотите, чтобы 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-памяти здесь.

person Marievi    schedule 13.02.2017