我有一个结构和函数的链接列表,可以从中添加、删除和创建数据。现在,当我尝试释放我在创建函数中分配的((数据时,问题就出现了。如果我删除释放内存的代码部分,但随后我不释放内存,则程序运行良好。
结构:
typedef struct carinfo_t
{
char * brand;
char * model;
int year;
float value;
struct carinfo_t * next;
} carinfo_t;
我在其中创建要添加到列表中的项的函数:
struct carinfo_t *createCarinfo(char *brand, char *model, int year, float value)
{
carinfo_t *newInfo = (carinfo_t *) malloc (sizeof(newInfo));
newInfo->brand = malloc (sizeof(brand));
newInfo->model = malloc (sizeof(model));
if (!newInfo)
{
printf("createCarinfo: error: no space leftn");
}
else
{
strcpy(newInfo->brand, brand);
strcpy(newInfo->model, model);
newInfo->year = year;
newInfo->value = value;
newInfo->next = NULL;
}
return newInfo;
}
免费功能:
void freeCarinfo(struct carinfo_t *carinfo)
{
if(carinfo->brand != 0)
{
free(carinfo->brand);
carinfo->brand = 0;
}
if(carinfo->model != 0)
{
free(carinfo->model);
carinfo->model = 0;
}
if(carinfo != 0)
{
free(carinfo);
carinfo = 0;
}
}
freeCarinfo(( 由我的 removeCarinfo(( 函数调用,它基本上确保当我删除我寻找的项目时队列中的所有项目都正确匹配。
我现在想做的是能够释放我给程序的内存
carinfo_t *newInfo = (carinfo_t *) malloc (sizeof(newInfo));
newInfo->brand = malloc (sizeof(brand));
newInfo->model = malloc (sizeof(model));
首先,当你为数据分配空间时,你犯了一个常见的错误:
newInfo->brand = malloc (sizeof(brand));
这分配了足够的空间来存储指向char
的指针,而不是数据本身。然后,您尝试将数据复制到其中:
strcpy(newInfo->brand, brand);
这很可能写入的数据比您为其创建的空间要多。
您需要为整个字符串创建足够的空间,以及