gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:52:46 25 4
gpt4 key购买 nike

我正在尝试在 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 并初始化:

char garb[33] = { '\0' };
char garb_path[300] = { '\0' };

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 中)。请参阅this post了解更多信息。

所以下面的代码应该可以工作(用 C 语言):

table[m][j] = malloc(DEPTH * sizeof(*table[m][j]));

关于在c中的堆上创建一个三维结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47570212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com