无效指针有条件提升段
当我们处理前一个或下一个为空的指针时,我使用的是双向链接列表,并且在边缘情况下获得了一些奇怪的性能。 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;
为什么在这里会出现分割错误?
没有找到相关结果
已邀请:
6 个回复
炬卤遁蝎变
对您来说真的像一个有效的地址吗? \\\\\\\\\\\“它太白痴以至于不能成为精神分裂症\”。
骇毖煽洁铂
地址看起来很奇怪,尽管它不是NULL。也许您正在尝试读取不允许您使用的内存。
穗揣
与实际的指针值不同,它看起来可疑。仅仅因为指针不是NULL并不意味着它是有效的。而且,如果使用无效的指针,则会出现aseg错误或其他任何错误。
购藏盗码韦
看起来有点可疑,也许
还没有正确初始化?也许它已经被其他一些代码踩了。 也许您应该尝试在valgrind下运行测试,看看它是否报告任何内容?
樊熄忙暖
听起来不太像是有效指针的值……很可能是调试初始化程序。
舞备联