繁体   English   中英

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 错误信息

现在,这是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM