我正在使用一个双链表,当我们处理为空的前一个或下一个指针时,我得到了一些关于边缘情况的奇怪性能。 GDB 返回以下错误:
Program received signal SIGSEGV, Segmentation fault.
0x0804a9c1 in DLinkDelete (delete=0xd8c9d33c) at test.c:213
213 if (prevdl && prevdl->next)
(gdb) p prevdl
$39 = (DoubleLink *) 0xdadadada
(gdb) p prevdl->next
$40 = (void *) 0x0
DoubleLink 是具有以下格式的结构:
typedef struct
{
void *next;
void *prev;
} DoubleLink;
为什么会在这里引发段错误?
最佳答案
大概 prevdl
指向无效内存?来吧,0xdadadada
对您来说真的像是一个有效地址吗? “精神 split 症太白痴了”。
关于c - 无效指针条件引发段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190809/