2016-09-04 6 views
1

ダブルポインタのメモリを適切に割り当てる方法が少し混乱しています。セグメントフォールト、Cのダブルポインタに代入

私のコードは、最初にUCHARポインタ配列の2番目のインデックスに値を格納しようとすると、セグメントフォルトを引き起こします。

ご協力いただければ幸いです。

 width = BMP_GetWidth (bmp); 
     height = BMP_GetHeight (bmp); 
     depth = BMP_GetDepth (bmp); 

     r = (UCHAR **) malloc(sizeof(UCHAR *) * height); 
     g = (UCHAR **) malloc(sizeof(UCHAR *) * height); 
     b = (UCHAR **) malloc(sizeof(UCHAR *) * height); 

     init_rgb(bmp, width, height, r, g, b); 

がポインタを利用しようとする(X = 1で失敗):あなたは

r[y] = (UCHAR *)malloc(sizeof(UCHAR) * w); 

のような行を必要とするよう

void init_rgb(BMP *bmp, UINT w, UINT h, UCHAR **r, UCHAR **g, UCHAR **b) { 
     printf("%ld, %ld\n", w, h); 
     UINT x, y; 
     for (y = 0; y < h; y++) { 
      r[y] = (UCHAR *)malloc(sizeof(UCHAR) * w); 
      for (x = 0; x < w; x++) { 
       BMP_GetPixelRGB(bmp, x, y, &r[y][x], &g[y][x], &b[y][x]); 
       printf("FAILING After First Iteration\n"); 
      } 
     } 
    } 

答えて

2

が見える私のダブルポインタを割り当てる

gおよびbについても同様である。そうしないと、g[y]b[y]は未定義です。あなたのコードは、それらを参照するとおそらく失敗しています。