簡體   English   中英

如何檢查指針(void)的值不為零(嘗試取消引用通用指針)

[英]how to check the value of pointer (void) not be zero (Attempt to dereference a generic pointer)

抱歉,這必須是一個非常簡單的問題,但是由於我以diffrenet的方式嘗試了但沒有成功,因此我必須在這里進行確認。 C語言編程

有一個結構名稱rtg 編輯:mtch的類型是LLIST的類型的初始是LL_NODE obj的類型是指針(無效)

我檢查時使用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-> mtch-> initial-> obj所指向的值是否不為零? (以防止上面的段錯誤)我的意思是,如果我檢查if (rtg->mtch->initial->obj) ,它將只是檢查指針obj,地址是否為零(這不是我想要的,我打算檢查該指針的值不為零(但是在檢入gdb之前我使用*時,它說“試圖取消引用通用指針”。那么檢查該值不為零的正確方法是什么(並防止此段錯誤)?

編輯:我已經嘗試過

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

但是我得到了編譯警告:

警告:指針與整數之間的比較

EDIT2,這是在源代碼中定義的內容

ECM_REQUEST是struct ECM_REQUEST rtg; 在此結構中,將mtch定義為LLIST mtch;

首字母為LL_NODE

obj是我要檢查obj值不為零的指針

所以現在我的問題已經很清楚了,不是嗎?

謝謝

您不能取消引用通用指針。 我能想到的唯一解決方案是使一個指向整數的臨時指針檢查該值。 基本上

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) { /* ... */ }

...請注意,將o的類型更改為任何其他對象指針應該是安全的(例如,您的問題似乎建議使用char **嗎?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM