Link C 中的列表和释放内存
Link Lists and Freeing Memory in C
我试图制作一个简单的 Link 列表结构,但出于某种原因,当我测试释放 LL 中的数据时,它会给我一个无效指针错误。谁能解释一下为什么?
#include <stdio.h>
#include <stdlib.h>
void add();
typedef struct node{
char* data;
struct node* next;
} node;
node** n;
int main(int argv, char** argc){
n = (node**)malloc(sizeof(node*)*10);
int i;
for(i = 0; i < 10; i++){
n[i] = NULL;
}
add();
free(n[0]->data);
return 0;
}
void add(){
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh[=11=]";
n[0] = (node*)malloc(sizeof(node));
n[0]->data = temp;
}
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh[=10=]";
你对 temp
的赋值是罪魁祸首,因为它将它设置为指向静态字符串 "Meh[=16=]",它不是你对 free
的。在这种情况下,您的 malloc 无效,因为您立即将其替换为指向静态数据。如果要将数据复制到 malloc
.
分配的内存中,请使用 memcpy 或类似工具
我试图制作一个简单的 Link 列表结构,但出于某种原因,当我测试释放 LL 中的数据时,它会给我一个无效指针错误。谁能解释一下为什么?
#include <stdio.h>
#include <stdlib.h>
void add();
typedef struct node{
char* data;
struct node* next;
} node;
node** n;
int main(int argv, char** argc){
n = (node**)malloc(sizeof(node*)*10);
int i;
for(i = 0; i < 10; i++){
n[i] = NULL;
}
add();
free(n[0]->data);
return 0;
}
void add(){
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh[=11=]";
n[0] = (node*)malloc(sizeof(node));
n[0]->data = temp;
}
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh[=10=]";
你对 temp
的赋值是罪魁祸首,因为它将它设置为指向静态字符串 "Meh[=16=]",它不是你对 free
的。在这种情况下,您的 malloc 无效,因为您立即将其替换为指向静态数据。如果要将数据复制到 malloc
.