申し訳ありませんが、非常に単純な質問に違いありませんが、さまざまな方法で試してみましたが成功しなかったため、ここで確認する必要があります。C プログラミング :
構造体名がありrtg
ます。編集: mtch の型は LLIST です 初期の型は LL_NODE です obj の typr はポインター (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
このヌル ポインターは、私のプログラムで segfault を引き起こします。私が探しているのは、rtg->mch->initial->obj が指している値がゼロでないことを確認する方法です。(上記のセグメンテーション違反を防ぐために)つまり
if (rtg->mtch->initial->obj)
、 でチェックすると、ポインタ obj 、アドレスがゼロではないかどうかがチェックされます(これは私が意図したものではありません。そのポインタの値がゼロではないことをチェックするつもりです(ただし、 * gdb をチェックインする前に、「ジェネリック ポインターを逆参照しようとしています」と表示されます。では、その値がゼロでないことを確認する (そしてこの segfault を防ぐ) 正しい方法は何ですか?
編集:私はこれを試しました
if (*((char *) rtg->mtch->initial->obj) != NULL)
しかし、私はコンパイル警告を受けました:
警告: ポインタと整数の比較
EDIT2 、ここでこれらはソースコードで定義されています
ECM_REQUEST は struct ECM_REQUEST rtg; です。この構造体では、mtch を LLIST mtch として定義します。
初期はLL_NODE
obj はポインタです obj の値がゼロでないことを確認したい
これで、私の質問についてすべてが明確になりましたね。
ありがとう