2015-05-07 58 views
0

我試圖創建一個指向結構的array的指針,並將它傳遞給function,我將在其中更改結構的值。c malloc指向結構數組的指針

可能有人請解釋一下我爲什麼我的代碼似乎不能正確地分配爲array的內存的編譯版本執行失敗的27pixels如果我存儲structinteger變量,而它的工作原理爲27pixels如果我只專賣店一個integer變量?

typedef struct Pixel 
    { 
     int label; 
     int area; 
    }Pixelmap; 

    int change_pixel(Pixelmap* pixelmap) 
    { 
     for (x = 0; x < dimx*dimy*dimz; x++) 
     { 
      pixelmap[x].label = x; /* or malloc and strcpy */ 
      pixelmap[x].area = 1; 
      printf("%i\n",pixelmap[x].label); 
     } 
     return 1; 
    } 

    int main() 
    { 
     Pixelmap *pm; 
     pm = malloc(dimx*dimy*dimz * sizeof (struct Pixel)); 
     change_pixel(&pm); 
     printf("End!\n"); 
     free(pm); 
     return 0; 
    } 
+2

'change_pixel(&pm);'====>' change_pixel(pm);'把你的編譯器警告提高到最高,你應該被告知不兼容的類型 – WhozCraig

+0

也許'change_pixel'應該重命名'set_pixel',因爲'malloc'分配的內存未初始化。 –

回答

2

您將指針的地址傳遞給change_pixel,但它期待指針本身。它應該是:

change_pixel(pm); 

我很驚訝你沒有從編譯器得到關於不正確類型的參數的警告。該論點被宣佈爲Pixelmap*,但你通過了Pixelmap**

+0

非常感謝。下次我會更注意警告! – tadata817

0

不知道這是一個錯字,但你分配

sizeof(struct Pixel) 

應該

sizeof(struct Pixelmap) 

pm = malloc(dimx*dimy*dimz * sizeof (struct Pixelmap));