2015-05-07 60 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));