Valgrind 神秘的大小为 8 的无效写入错误
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);
}
但是,上面的代码给我以下错误:
现在,这是情节转折。 如果我删除数据的代码,代码可以正常工作并且 valgrind 不会出现任何问题。
我找不到任何修复方法,这让我无法完成一项重大任务,而且我不知道该怎么做。 感谢任何帮助。
node = malloc(sizeof(Node));
以上将只分配必要的大小来存储指向 struct node_t
的指针,因为你如何定义 Node
。
要么将行更改为:
node = malloc(sizeof(*node));
或者将 Node 定义为 struct node_t
的别名而不是指向它的指针。
node = malloc(sizeof(Node));
分配的 space 只够一个指针使用。
另一方面,该结构有 2 个指针,因此通常它会大于一个指针。
该行应该是
node = malloc(sizeof(struct node_t));
或
node = malloc(sizeof(*node));
分配足够的space。
在
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;
并且不要到处屏蔽指针
我进行了广泛的搜索,没有找到答案,所以最好的选择是问我自己的问题。我目前正在为大学做作业,它要求我们构建一个具有键和值字符串的节点。
我构建了以下节点以及以下两个函数:
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));
以上将只分配必要的大小来存储指向 struct node_t
的指针,因为你如何定义 Node
。
要么将行更改为:
node = malloc(sizeof(*node));
或者将 Node 定义为 struct node_t
的别名而不是指向它的指针。
node = malloc(sizeof(Node));
分配的 space 只够一个指针使用。
另一方面,该结构有 2 个指针,因此通常它会大于一个指针。
该行应该是
node = malloc(sizeof(struct node_t));
或
node = malloc(sizeof(*node));
分配足够的space。
在
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;
并且不要到处屏蔽指针