【发布时间】:2016-02-05 23:56:29
【问题描述】:
我在创建 concat(); 函数时遇到问题,它可以工作,但是当我继续释放列表时,我收到 malloc 错误...我很肯定我正在正确释放我的列表,当我不要运行我的concat(); 函数,列表会被正确释放。这是我相信我在这个函数中做错了什么的理由......
typedef struct node {
ElemType val;
struct node *next;
} NODE;
struct list_struct {
NODE *front;
NODE *back;
};
void lst_concat(LIST *a, LIST *b) {
if( !( a->front && b->front)) return ;
if (a->front == NULL && b->back == NULL) {
return;
}
if (a->front == NULL && b->front != NULL) {
a->front = b->front;
return;
}
else{
NODE *tmp = a->front;
if( a->back == NULL )return;
if( a->front == NULL )return;
if( b->back == NULL )return;
if( b->front == NULL )return;
else{
NODE *tempPtr = a->back;
tempPtr->next=b->front;
tempPtr = b->front;
a->back = b->back;
}
}}
void lst_free(LIST *l) {
NODE *p = l->front;
NODE *pnext;
while(p!= NULL) {
pnext = p->next; // keeps us from de-referencing a freed ptr
free(p);
p = pnext;
}
// now free the LIST
free(l);
}
**UPDATE,此更新列表正确,但是,我仍然可以释放两个列表,还是我可以只释放一个,因为它们已加入?我的lst_free() 在上面。
【问题讨论】:
-
a->back = a->back;看起来不对
-
@bruceg 我很抱歉,我不知道它是如何到达那里的......它假设是 'b' 它已修复,但该功能仍然无法正常工作..
-
@milevyo 我不确定你在问什么,抱歉!:(
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable Example。
-
这里有几个错误。我认为您的问题更为根本 - 显示所有代码...例如
LIST....
标签: c linked-list concatenation concat