【发布时间】:2015-11-29 00:17:47
【问题描述】:
我试图通过一个单链表并删除所有包含某个字符的节点。我一直在尝试通过在线查找并尝试这些建议来修复指针错误(它说 glibc 检测到:双重释放或损坏),但现在我似乎在重写我的原始代码后陷入了循环。我认为我至少被困在第三个 while 循环中,我尝试过使用 if/else 语句,但同样的事情发生了。我有时也会遇到分段错误。
代码:
int MonsterList::removeMonsterType(char monster){
if(!isalpha(monster)) return 0;
if(first == 0) return 0;
int count = 0;
char key = toupper(monster);
MonsterNode *prev = first; //first is the ptr in the list this function is called on
if(prev->next == 0){
while(prev->id == key || prev->id == key+32){
first = 0;
delete prev; prev = 0;
count++;
return count;
}
return count;
}
MonsterNode *temp = prev->next;
while(temp != NULL){
while(prev->id == key || prev->id == key+32){
first = temp;
delete prev;
prev = temp;
temp = temp->next;
}
while(temp->id == key || temp->id == key+32){
prev->next = temp->next;
delete temp;
temp = prev->next;
count++;
}
prev = temp;
temp = temp->next;
}
return count;
}
提前感谢您的帮助。
【问题讨论】:
-
这段代码错误太多。解决方案应该比这简单得多。您应该尝试完全重新开始,看看会发生什么;尽可能简单。