【问题标题】:segment fault, assigning to double pointer in c段错误,分配给c中的双指针
【发布时间】:2016-09-04 23:31:08
【问题描述】:

我对如何为双指针正确分配内存感到有些困惑。

我的代码第二次尝试在第一个 UCHAR 指针数组的第二个索引处存储值时导致段错误。

任何帮助将不胜感激。

分配我的双指针:

        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 时失败):

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

【问题讨论】:

    标签: c pointers malloc double-pointer


    【解决方案1】:

    看起来你需要这样的一行

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

    也适用于gb。如果你不这样做,g[y]b[y] 是未定义的。当您引用这些代码时,您的代码可能会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多