[英]Valgrind mysterious invalid write of size 8 error
我进行了广泛搜索,但没有找到答案,所以最好的选择是问我自己的问题。 我目前正在为大学做一项作业,要求我们构建一个具有键和值字符串的节点。
我构建了以下节点,以及以下两个功能:
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);
}
现在,这是 plot 扭曲。 如果我删除数据的代码,代码工作正常,valgrind 不会给出任何问题。
我找不到任何解决方法,它让我无法完成一项重大任务,我不知道该怎么办。 任何帮助表示赞赏。
node = malloc(sizeof(Node));
分配的空间仅够一个指针使用。
另一方面,该结构有 2 个指针,因此通常它会大于一个指针。
该行应该是
node = malloc(sizeof(struct node_t));
或者
node = malloc(sizeof(*node));
分配足够的空间。
node = malloc(sizeof(Node));
由于您定义Node
的方式,上述内容只会分配必要的大小来存储指向struct node_t
的指针。
将行更改为:
node = malloc(sizeof(*node));
或者将 Node 定义为struct node_t
的别名,而不是指向它的指针。
在
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;
并且不要到处掩盖指针
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.