c - 具有多维数组的 malloc

标签 c multidimensional-array tree malloc

我正在编写一本结构如下的字典:

typedef union _dict {
    union _dict * children[M];
    list * words[M];
} dict;

初始化:

dict *d = (dict*) malloc(sizeof(dict));

我正在尝试执行以下操作:

dict *temp;
temp = d;

temp=temp->children[0];
temp=temp->children[0];

第一个 temp->children[0] 有效,但第二个无效。我试图理解为什么。我认为这是一个内存分配问题。

编辑 1: 我试过以下代码:

dict *d = (dict*) malloc(sizeof(dict));

dict *temp;
temp = d;

dict *d2 = (dict*) malloc(sizeof(dict));
temp->children[0] = d2;

temp = temp->children[0];
temp = temp->children[0];
temp = temp->children[0];

现在可以了,但我不明白为什么......我的意思是,我不允许下一个 child 有一些内存。

编辑 2: 所以现在,我想在我的算法中使用它。我卡住的代码块如下:

list *l;
if (temp->words[occur] != NULL) {
    /* ... */
}
else {
    l = list_new();
    temp->words[occur] = (list*) malloc(sizeof(list));
    temp->words[occur] = l;
}
list_append(l,w);
list_print(l);

如果我在这个 block 之前放一个 temp->words[occur] = NULL;,这个词就成功添加了,但是每次使用算法时都会创建一个新列表。我想将我的单词添加到先前创建的列表中,假设它存在。

bzero((void*)d, sizeof(dict)); 指令在 dict 初始化后使用。

最佳答案

首先,在 temp 中,您有一个指向对象的有效指针(使用 malloc 分配)。然后您将一个未初始化的指针分配给 temp 并尝试以预期的结果取消引用它。

关于c - 具有多维数组的 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231969/

相关文章:

arrays - 高效/并行在 Java <= 1.7 中对数组中的每个元素应用操作?

c - 如何在我的 C 程序中的所有函数中访问数组?

.net - 根据父子数据绘制树形图或组织图

PHP 字符串到嵌套/多维数组

c - 将十六进制char IP转换为二进制

java - 如何修复构建 Android 时的错误 : Use of undeclared identifier ‘V4L2_COM_CMD_FLUSH’

c - Ruby 和 C 之间的主要区别

c - 将一维数组视为二维数组进行排序

c++ - C/C++ 3维数组如何存储在内存中以及遍历它的最快方法是什么

Java - 二维数组检查对角数字板