こんなのあったら
if(pointer!=NULL&&(*pointer)==x) { ... }
ポインタがNULLの場合、セグメンテーション違反になりますか? コンパイラ固有の場合は、GCC でどのようになっているのか知りたいです。
こんなのあったら
if(pointer!=NULL&&(*pointer)==x) { ... }
ポインタがNULLの場合、セグメンテーション違反になりますか? コンパイラ固有の場合は、GCC でどのようになっているのか知りたいです。
いいえ、短絡評価のためです。
LHS がfalseの場合、RHS は評価されません。したがって、NULL
ポインターの場合、RHS にヒットして逆参照を試みることはありません。
を使用すると、最初の条件が の場合&&
にのみ 2 番目の条件が実行されますTRUE
。これにより、セグメンテーション違反が発生することはありません。
同様のチェックを行うこと||
もできます。
if ((pstr_buf == NULL) || (pstr_buf[0] == '\0'))
{
printf("\ninvalid string buffer\n");
}