具有结构类型数组的结构哈克

时间:2013-04-03 20:48:49

标签: c struct malloc

编辑 - 之前发布的代码因为无法编译而被提出

假设我有以下struct hack的变种:

typedef struct hack *Hack;
struct hack {
    char* value;
    Hack arr[1];
};

我到底应该做什么编辑?我应该这样做:

malloc(sizeof(struct hack) + sizeof(struct hack)*(numElems-1));

可缩短为:

malloc(sizeof(struct hack) * numElems);

这是对的吗?

1 个答案:

答案 0 :(得分:1)

我认为你的第一个代码是对的。它是“不完整的元素类型”

typedef struct hack Hack;
struct hack {
    char* value;
    Hack arr[1];
};

等于:

struct hack {
    char* value;
    struct hack arr[1];  /* Here wrong */
};

在错误的点上,您尝试定义struct hack的数组,但是: struct hack的定义尚未完成。哦,你修改它。

对于您的新代码,它应该是:

typedef struct hack *Hack;
struct hack {
    char* value;
    Hack arr;
};
Hack node = malloc(sizeof(struct hack));
node->arr = malloc(sizeof(struct hack) * numElems);

在这种情况下,“节点”是指向单个结构黑客的指针。而这个实体的成员“arr”是另一个结构黑客阵列的另一个点。否则,您可以将数据构建为典型的链接列表。

更新:注意,节点和(node->arr)[i]中的所有值都未初始化!在memset()之后,您应该malloc()将它们全部归零。或者确保在使用前分配有效值。如果在分配有效值之前使用它,则最好满足分段错误。在更糟糕的情况下,找出错误的地方需要花费你的时间。