我在下面的代码部分遇到了分段错误:(关于这个分段错误,我在一个主题中问了两个问题)
req_cw(ECM_REQUEST *er, int32_t flag, int32_t reader_types){
LL_NODE *ptr;
for (ptr = er->matching_rdr->initial ; ptr ; ptr = ptr->nxt) {
if (ptr == er->fail)
break;
rdr = (struct s_reader*)ptr->obj;
we_equest(rdr->fd, er);
}
}
正如你所看到的,即使使用控制结构if(ptr->obj && ptr)
为了确定ptr
(or ptr->obj
不会null
指针),但它并不能阻止它,并且当我尝试打印该值时出现分段错误ptr->obj
with:
打印 ptr->obj ,gdb 说:
(gdb) 打印指针 $1 = (LL_NODE *) 0x149
(gdb) x 0x149
0x149:无法访问地址0x149处的内存
我的问题是:如何防止此分段错误,为什么会发生此分段错误以及如何修复它?
- 关于这个段错误,当使用 gdb 时,我检查了帧 1(段错误发生前的一帧),我发现
呃->CW 是"\000 <repeats 15 times>"
我的问题是我该如何控制er->cw
不会等于"'\000' <repeats 15 times"
?
我这样做了,我知道这是不正确的(而且我错过了一些东西),这就是我在这里问的原因
if (er->cw)
req_cw(er , ...)
问题在于添加if(er->cw)
。我认为cw
是字符,我不应该表现得像整数,但我不知道如何检查它不为零?我的意思是,即使当我使用 gdb 检查时再次使用这一行,仍然er->cw
值为“'\000'”的值正在传递,那么如何使用 if 控制块来检查何时er->cw
不等于 '\000' " ?
提前致谢。