【发布时间】:2018-09-16 16:10:37
【问题描述】:
我有一个列表,列表中的每个节点都包含一个 char *data 字段,该字段必须与节点本身进行 malloc'd,但是当我尝试释放该数据时,控制台会停止,它不会崩溃,他们没有错误,什么都没有。但是,如果我将其注释掉并仅释放列表节点,它就可以正常工作。
我这样做对吗?
void removeSpecificData(List *list, char *course)
{
ListNodePtr currentNode = list->head;
ListNodePtr previousNode = NULL;
while (currentNode != NULL)
{
if (strcmp(currentNode->data, course) == 0)
{
ListNodePtr nodeToFree = currentNode;
if (previousNode == NULL)
{
list->head = currentNode->nextNode;
currentNode = list->head;
}
else
{
previousNode->nextNode = currentNode->nextNode;
currentNode = previousNode->nextNode;
}
printf("Free Data");
free(nodeToFree->data);
printf("Free Node");
free(nodeToFree);
}
else
{
previousNode = currentNode;
currentNode = currentNode->nextNode;
}
}
}
这是我的 createListNode 函数,以防需要查看。
ListNodePtr createListNode(char *newCourse)
{
ListNodePtr newNode = (ListNodePtr)malloc(sizeof(struct ListNode));
newNode->data = (char *)malloc(sizeof(strlen(newCourse) + 1));
strcpy(newNode->data, newCourse);
newNode->nextNode = NULL;
return newNode;
}
提前致谢。
【问题讨论】:
-
第一个函数不能编译,因为变量 nodeToFree 既没有声明也没有赋值。所以这条语句 free(nodeToFree);没有意义。:)
标签: c pointers char malloc free