【发布时间】:2015-11-18 13:40:05
【问题描述】:
我有这个删除某个节点的函数,然后我循环它直到所有具有该值的节点都从列表中删除。
但是,当我尝试删除第一个节点时,会导致第二次调用出现分段错误。它适用于列表的其他部分。
这是我为删除节点而调用的函数:
int delete(char* value, char* attribute, int attr_count){
dataContainer = datadata;
dataList *temp, *prev;
temp = dataContainer;
prev = NULL;
int g = 0;
while(g < attr_count){
if(strlen(dataContainer->attributes[g]) == 0){
break;
}
if(!(strcmp(attribute, dataContainer->attributes[g]))){
break;
}
g++;
}
while(temp){
if(!(strcmp(temp->values[g], value))){
if(prev == NULL) {
dataContainer = temp->prev;
}else{
prev->prev = temp->prev;
}
free(temp);
return 1;
}
temp = dataContainer;
prev = temp;
temp = temp->prev;
}
return 0;
}
【问题讨论】:
-
更多关于
datacontainer和dataList结构的信息以及了解datadata的来源会有所帮助。 -
在调用
delete之前,您是否验证数据结构有效? -
dataList是一个具有char**属性和值的结构。以及指针 prev 和 next。dataContainer和datadata是dataList类型的全局变量。 -
@KarolyHorvath 是的。我尝试打印整个列表,其内容没有错误。
-
attr_count对所有节点都有效吗?访问values[attr_count]有效吗?
标签: c linked-list segmentation-fault