【发布时间】:2014-04-18 00:53:17
【问题描述】:
所以,我需要生成一个数组,结构体是这样设置的:
struct image
{
int height, width;
unsigned char (**data)[3];
};
typedef struct image image_t;
我正在使用一个函数来分配所有位置并将其初始设置为 0 值(它实际使用的三个插槽)
image_t create_new_image(int height, int width)
{
int i, j;
image_t ret;
ret.data = malloc(height + 5);
for (i = 0; i < height; i++)
ret.data[i] = malloc(width + 5);
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++) //hit every node
{
ret.data[i][j][0] = 0;
ret.data[i][j][1] = 0;
ret.data[i][j][2] = 0;
}
}
ret.height = height;
ret.width = width;
check_nulls(ret);
return ret;
}
GDB 给出以下信息:
Breakpoint 2, create_new_image (height=20, width=21) at ansilib.c:28
28 for (i = 0; i < height; i++)
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000000100001292 in create_new_image (height=20, width=21) at ansilib.c:33
33 ret.data[i][j][1] = 0;
(gdb) p i
$1 = 4
(gdb) p j
$2 = 0
(gdb) p ret.data[0]
$3 = (unsigned char (*)[3]) 0x1001038c0
(gdb) p ret.data[1]
$4 = (unsigned char (*)[3]) 0x1001038e0
(gdb) p ret.data[2]
$5 = (unsigned char (*)[3]) 0x100103900
(gdb) p ret.data[3]
$6 = (unsigned char (*)[3]) 0x100103920
(gdb) p ret.data[4]
$7 = (unsigned char (*)[3]) 0x0
(gdb) p ret.data[5]
$8 = (unsigned char (*)[3]) 0x0
有人可以帮助我了解我做错了什么吗?我对多维运行时分配的数组处理得不多,所以可能只是它的分配方式,但我很无能为力。
【问题讨论】:
标签: c arrays multidimensional-array malloc