尝试打印链表 C 时出现分段错误
Segmentation fault when trying to print linked list C
我正在尝试打印我的链表,直到下一个节点为 NULL,但我在打印两个节点后出现段错误。 mov 是我的链表节点。
while(mov->next != NULL)
{
printf("%s\n", mov->movie_title);
printf("%s\n", mov->...etc...)
free(mov);
mov = mov->next;
}
这是我用来将数据分配给节点的推送函数。
void push(movie** mov)
{
movie* new = malloc(sizeof(movie));
new->next = (*mov);
(*mov) = new;
}
将数据分配给节点后,我调用push(&mov);
我之前使用的是结构数组,但由于需要存储的内存量变得非常大,我认为它不会很好地工作,因为 malloc 分配了一个连续的内存块,而对于节点,我可以为每个节点分配小块内存。
这里的问题出在 free(mov) 行和后面的内容中。
你是自由的 mov 然后尝试在它旁边分配 mov->,你看到问题出在哪里了吗?
mov->next 无法再访问,因为您释放了存储它的结构
打印整个链表的更好方法是设置一个 "temporary" 变量,它将浏览列表的每个节点并在执行时打印每个值。
举个例子:
void printMovieList(movie** mov) {
movie* temp;
temp = *mov;
while(temp->next != NULL)
{
printf("%s\n", temp->movie_title);
printf("%s\n", temp->...etc...);
temp = temp->next;
}
}
我正在尝试打印我的链表,直到下一个节点为 NULL,但我在打印两个节点后出现段错误。 mov 是我的链表节点。
while(mov->next != NULL)
{
printf("%s\n", mov->movie_title);
printf("%s\n", mov->...etc...)
free(mov);
mov = mov->next;
}
这是我用来将数据分配给节点的推送函数。
void push(movie** mov)
{
movie* new = malloc(sizeof(movie));
new->next = (*mov);
(*mov) = new;
}
将数据分配给节点后,我调用push(&mov);
我之前使用的是结构数组,但由于需要存储的内存量变得非常大,我认为它不会很好地工作,因为 malloc 分配了一个连续的内存块,而对于节点,我可以为每个节点分配小块内存。
这里的问题出在 free(mov) 行和后面的内容中。
你是自由的 mov 然后尝试在它旁边分配 mov->,你看到问题出在哪里了吗?
mov->next 无法再访问,因为您释放了存储它的结构
打印整个链表的更好方法是设置一个 "temporary" 变量,它将浏览列表的每个节点并在执行时打印每个值。
举个例子:
void printMovieList(movie** mov) {
movie* temp;
temp = *mov;
while(temp->next != NULL)
{
printf("%s\n", temp->movie_title);
printf("%s\n", temp->...etc...);
temp = temp->next;
}
}