我目前正在用Opaque指针编写二叉树结构。但是,我对Valgrind的写入无效。
Tree.c:
struct node{
int key;
struct node *left, *right, *parent;
};
NODE nodeInit(void)
{
NODE tree = (NODE) malloc(sizeof(NODE));
tree->key = -1;
//Error with the 3 lines below
tree->right = NULL;
tree->left = NULL;
tree->parent = NULL;
return tree;
}
Tree.h:
typedef struct node* NODE;
注意:我不得更改标头文件。
答案 0 :(得分:2)
你正在为分配指针的内存。
typedef struct node * NODE表示从现在起NODE
是“指向struct node
”的别名。因此malloc(sizeof(NODE))
分配sizeof struct node *
个字节的内存 - 足够的内存来保存指向结构的指针,不足以存储包含结构的内存。
使用:
NODE tree = malloc(sizeof *tree);
或
NODE tree = malloc(sizeof (struct node));
前者可能更好,因为它隐含地意味着“分配足够的内存来包含指针tree
”所指向的内容。
答案 1 :(得分:1)
NODE tree = (NODE) malloc(sizeof(NODE)); this line is incorrect.
应该是
NODE tree = (NODE) malloc(sizeof(struct node));