簡體   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