我正在尝试在 MSVC 上使用 c 中的malloc
创建一个三维结构数组。它可以编译没有错误,但是当我调试它时,它在初始化某些元素后出现错误。
声明:
typedef struct table_info
{
unsigned long size;
char code[33];
char path[300];
}table_info;
table
是一个全局变量,定义为:
struct table_info ***table=NULL;
malloc
并初始化table
:
char garb[33] = { ' ' };
char garb_path[300] = { ' ' };
table = (table_info***)malloc(ROWS* sizeof(**table));
for (int m = 0; m < ROWS; m++)
{
table[m] = (table_info**)malloc(COLS* sizeof(*table[m]));
for (int j = 0; j < COLS; ++j)
{
table[m][j] = (table_info*)malloc(DEPTH * sizeof(table[m][j]));
for (int k = 0; k < DEPTH; ++k)
{
table[m][j][k].size = 0;
strcpy_s(table[m][j][k].code, sizeof(table[m][j][k].code), garb);
memcpy(table[m][j][k].path, garb_path, sizeof(garb_path));
}
}
}
我是否正确初始化了它?或者我应该更正什么才能使其工作?
传递给malloc
的大小在以下行中不正确:
table[m][j] = (table_info*)malloc(DEPTH * sizeof(table[m][j]));
sizeof(table[m][j])
只是sizeof(**table)
,这是sizeof(table_info *)
。 它应该是sizeof(table_info)
的,或者sizeof(*table_info[m][j])
或sizeof(***table_info)
。
你也不需要投射malloc
的结果,这在今天通常是不受欢迎的(至少在 C 中)。 有关更多信息,请参阅此帖子。
所以以下内容应该有效(在 C 中):
table[m][j] = malloc(DEPTH * sizeof(*table[m][j]));