[英]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.