我有这个函数来检查链表中的节点是否在物理上彼此相邻,用start_byte
和end_byte
变量按字节顺序排列。但我的功能一直是segfaulting,我不知道为什么,有人可以提供帮助吗?
void checkIfFreeTogether(void)
{
FREEPTR l =freelist;
FREEPTR f = freelist;
FREEPTR g =freelist;
int i = 0;
while(f->next!=NULL)
{
if(f->end_byte+1==f->next->start_byte)
{
cout << f << endl;
f->size = f->size + f->next->size;
cout << f << endl;
f->end_byte = f->next->end_byte;
cout << f << endl;
cout << f->next << endl;
f->next=f->next->next;
cout << f << endl;
cout << f->next << endl;
}
f=f->next;
}
}
这是此特定函数的输出,用于调试和显示值的couts
0x200583a8
0x200583a8
0x200583a8
0x20058438
0x200583a8
0
Segmentation fault (core dumped)
答案 0 :(得分:1)
这可能f->next->next
为空:
f->next=f->next->next;
cout << f << endl;
cout << f->next << endl;
然后你:
f=f->next;
并且while
在下一次迭代时崩溃
所以你的while
应该是:
while(f && f->next)
你调试了吗?