2

こんなのあったら

    if(pointer!=NULL&&(*pointer)==x) { ... }

ポインタがNULLの場合、セグメンテーション違反になりますか? コンパイラ固有の場合は、GCC でどのようになっているのか知りたいです。

4

2 に答える 2

10

いいえ、短絡評価のためです。

LHS がfalseの場合、RHS は評価されません。したがって、NULLポインターの場合、RHS にヒットして逆参照を試みることはありません。

于 2013-01-08T10:59:12.140 に答える
1

を使用すると、最初の条件が の場合&&にのみ 2 番目の条件が実行されますTRUE。これにより、セグメンテーション違反が発生することはありません。

同様のチェックを行うこと||もできます。

if ((pstr_buf == NULL)  || (pstr_buf[0] == '\0'))
{
   printf("\ninvalid string buffer\n");
}
于 2013-01-08T11:09:17.990 に答える