【问题标题】:c malloc pointer to an array of structc malloc 指向结构数组的指针
【发布时间】:2015-05-07 17:27:42
【问题描述】:

我正在尝试创建一个指向结构体array 的指针,并将其传递给function,在那里我将更改结构体的值。

有人可以解释一下为什么我的代码似乎没有为array 正确分配内存,因为如果我存储both,编译版本的执行失败27pixels integer struct 中的变量,而如果我只存储 一个 integer 变量,它适用于 27 像素?

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

【问题讨论】:

  • change_pixel(&amp;pm); ====> change_pixel(pm); 并尽可能地提高编译器警告。您应该已收到不兼容类型的通知。
  • 也许change_pixel应该重命名为set_pixel,因为malloc分配的内存是未初始化的。

标签: c arrays pointers memory-management struct


【解决方案1】:

您将指针的地址传递给change_pixel,但它需要指针本身。应该是:

change_pixel(pm);

我很惊讶您没有从编译器收到关于参数类型不正确的警告。参数声明为Pixelmap*,但您传递了Pixelmap**

【讨论】:

  • 非常感谢。下次注意警告!
【解决方案2】:

不确定是不是拼写错误,但你分配了

sizeof(struct Pixel)

应该是

sizeof(struct Pixelmap)

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

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 2012-04-18
    • 2012-06-04
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多