【问题标题】:array of typedef struct pointerstypedef 结构指针数组
【发布时间】:2013-02-24 15:53:08
【问题描述】:

我的头文件中有以下内容

typedef struct tree_node* TreeNode;

struct tree_node{

    int value;
    void *data;

    TreeNode parent;
    TreeNode left;
    TreeNode right;

};

要创建一个树节点,我正在执行以下操作

TreeNode createTreeNode(int value, void *data){

    TreeNode node;

    node = malloc(sizeof(TreeNode*));

    if(node == NULL){
        printf("TreeNode malloc failed!!\n");
        exit(EXIT_FAILURE);
    }


    node->data = data;
    node->value = value;
    node->parent = NULL;
    node->right = NULL;
    node->left = NULL;

    return node;

}

现在我想创建 TreeNodes 数组...我该怎么做? 我正在考虑关注

TreeNode *treeNodes;
treeNodes = malloc(26 * sizeof(TreeNode));

然后

treeNodes[a_number_between_0_to_25] = createTreeNode(intNodeValue, NULL);

【问题讨论】:

  • 将 sizeof(TreeNode*) 替换为 sizeof(TreeNode) 因为指针的大小不是结构本身的大小
  • typedef struct tree_node* TreeNode; 不是个好主意。它隐藏了TreeNode 实际上是一个指针的事实。让TreeNode 成为struct tree_node 的别名并改用TreeNode*
  • 你真的想要一个 TreeNodes 数组(换句话说,指针)还是一个 tree_node 结构数组?
  • 我完全同意 LihO,帮自己和其他人一个忙,使用typedef struct tree_node TreeNode; ... TreeNode *parent; ...
  • @Liho 你说得对,我应该把 typedef 改成 struct 而不是 struct pointer。

标签: c pointers struct typedef


【解决方案1】:

node = malloc(sizeof(TreeNode*)); 只会分配 4 个字节(或 8 个字节,具体取决于指针的大小)。这是错误的。使用sizeof(struct tree_node); 否则会导致分段违规。

除此之外,您的代码看起来还不错。是的,这就是创建数组的方式。

也研究 VLA(可变长度数组)

【讨论】:

  • @AmitPatil 很酷,我希望我发布的解决方案能解决问题?
  • 我应该使用 typedef struct* 还是 typedef struct?
  • @AmitPatil 使用typedef struct tree_node TreeNode, *PTreeNode;,如果您不喜欢到处看到*。这就是Hungarian 符号的工作原理。
  • “typedef struct tree_node TreeNode”是否将struct暴露给外部世界?
  • 我不确定你所说的“暴露于外部世界”是什么意思@AmitPatil
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多