在 c 中的堆上创建一个三维结构数组



我正在尝试在 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]));

相关内容

  • 没有找到相关文章

最新更新