【问题标题】:Bus error 10 with 2d array of struct inside struct结构内部二维结构数组的总线错误 10
【发布时间】:2017-07-01 12:15:46
【问题描述】:

我在填充结构中的二维数组时遇到问题。它允许我为像素[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;
}

【问题讨论】:

  • Pixel * pixels[MAX_HEIGHT][MAX_WIDTH]; --> Pixel pixels[MAX_HEIGHT][MAX_WIDTH]; 或者先分配再使用。
  • 哦,谢谢!解决了这个问题,非常感谢!

标签: c arrays multidimensional-array struct ppm


【解决方案1】:

换行:

Pixel * pixels[MAX_HEIGHT][MAX_WIDTH];

到:

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 动态内存分配的更多信息here

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多