c - 无效指针条件引发段错误

标签 c c99 void-pointers

我正在使用一个双链表,当我们处理为空的前一个或下一个指针时,我得到了一些关于边缘情况的奇怪性能。 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/

相关文章:

c++ - 友元函数返回 (void*) : cannot get implementation in . cpp 文件工作

c++ - 这是一个好的设计选择吗?

c - 在 GDB 中反汇编 C 函数。 GAS 组装说明的澄清

c++ - 边界矩形碰撞测试?

c - `pixel (*copy)[rows] = malloc(cols * sizeof (*copy))` 需要调用多少次 free()

c - 为什么 gcc -ansi 去掉 cosf 之类的声明?

c++ - 转换为 void* 并返回 Original_Data_Type*

c - 为什么代码片段 printf 的输出是 ("%. %. %. ");变成%.0 %.0 %.0?

c - 如何测试是否支持像 uint64_t 这样的类型?

c - 什么是堆栈重新分配以及何时发生?