c -如何检查指针(void)的值不为零(尝试解引用泛型指针)



对不起,这一定是一个非常简单的问题,但由于我尝试了不同的方式没有任何成功,我必须在这里问,以确保。C语言编程:

有一个结构体名称rtg。编辑:匹配类型是LLIST初始化类型为LL_NODE对象指针类型(void)

。检查

时使用gdb
(gdb)  print *rtg->mtch->initial->obj
Attempt to dereference a generic pointer.

(gdb) print rtg->mtch->initial->obj
$10 = (void *) 0x4cc660
(gdb) x 0x4cc660
0x4cc660:       0x00000000

这个空指针在我的程序中导致段错误。我要找的是简单地如何检查什么rtg-> match ->initial->obj是指向不为零的值?(以防止上述段故障)我的意思是,如果我检查if (rtg->mtch->initial->obj),它只是检查指针obj,地址不为零(这不是我打算的,我打算检查该指针的值不为零(但当我在检查gdb之前使用*时,它说"尝试解引用一个泛型指针"。那么,检查该值不为零(并防止此段故障)的正确方法是什么?

编辑:i had try this

if (*((char *) rtg->mtch->initial->obj) != NULL)

但是我得到编译警告:

警告:指针与整型

比较

EDIT2,源代码中定义了什么

ECM_REQUEST是structECM_REQUEST rtg优先;

首字母是LL_NODE

obj是一个指针我想检查obj值是否为0

所以现在我的问题都清楚了,不是吗?

谢谢

不能解引用泛型指针。我能想到的唯一解决方案是创建一个临时的integer指针来检查值。基本上

int *tmp = rtg->mtch->initial->obj;
if (*tmp != 0)
/* the rest of your code here */

强制转换也可以工作,但是在我看来,使用临时指针使代码更容易阅读。

这个警告是因为左边是一个解引用的char *(换句话说,char),右边是一个空指针常量,以void *的形式;您正在将char值转换为void *值…也许你指的是char ** ?

void *o = rtg == NULL                ? NULL
        : rtg->mtch == NULL          ? NULL
        : rtg->mtch->initial == NULL ? NULL
        : rtg->mtch->initial->obj;
if (o != NULL) { /* ... */ }

…请注意,将0的类型更改为任何其他对象指针(例如:你的问题似乎暗示char ** ?)