段错误,分配给c中的双指针
segment fault, assigning to double pointer in c
我对如何为双指针正确分配内存有点困惑。
我的代码第二次尝试在第一个 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");
}
}
}
看起来你需要这样一行
r[y] = (UCHAR *)malloc(sizeof(UCHAR) * w);
对于 g
和 b
也是如此。如果你不这样做,g[y]
和 b[y]
是未定义的。当您引用这些代码时,您的代码可能会失败。
我对如何为双指针正确分配内存有点困惑。
我的代码第二次尝试在第一个 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");
}
}
}
看起来你需要这样一行
r[y] = (UCHAR *)malloc(sizeof(UCHAR) * w);
对于 g
和 b
也是如此。如果你不这样做,g[y]
和 b[y]
是未定义的。当您引用这些代码时,您的代码可能会失败。