我已经搜索了很多,没有找到答案,所以最好的选择是问我自己的问题。我目前正在为大学做作业,要求我们建立一个具有键和值字符串的节点。
我构造了以下节点以及以下两个功能:
typedef struct node_t
{
char *key;
char *data;
} * Node;
Node nodeCreate()
{
Node node = NULL;
node = malloc(sizeof(Node));
if (node == NULL)
return NULL;
node->key = NULL;
node->data = NULL;
return node;
}
void nodeDestroy(Node node)
{
if (node == NULL)
return;
if (node->key != NULL)
free(node->key);
if (node->data != NULL)
free(node->data);
free(node);
}
现在,这是情节的转折。 如果删除数据代码,则代码可以正常工作,并且valgrind不会出现任何问题。
我找不到针对此问题的任何修复程序,这使我无法完成一项繁重的任务,而且我不知道该怎么办。 任何帮助表示赞赏。
node = malloc(sizeof(Node));
正在分配仅用于一个指针的空间。
另一方面,该结构具有2个指针,因此通常它将大于一个指针。
该行应该是
node = malloc(sizeof(struct node_t));
或
node = malloc(sizeof(*node));
分配足够的空间。
node = malloc(sizeof(Node));
由于定义struct node_t
的方式,以上内容仅分配必要的大小来存储指向Node
的指针。
将行更改为:
node = malloc(sizeof(*node));
或将Node定义为struct node_t
的别名,而不是指向它的指针。
in
malloc(sizeof(Node))
您没有按预期分配node_t
,而是指向它的指针
替换为
malloc(sizeof(struct node_t))
定义类型指针,这会产生这种错误,替换是一个坏主意,>
typedef struct node_t { char *key; char *data; } * Node;
作者
typedef struct node_t { char *key; char *data; } Node;
并且不要在所有地方屏蔽指针