1

違法な NULL ptr デリファレンスがないように、次のコードは常にコンパイルされるのでしょうか?

私の懸念は、「b」が NULL かどうかを最初に確認する前に、コンパイラが b->value かどうかを確認する可能性があることです。

typedef struct
{
    int value;
} mystruct;

int func(mystruct * b)
{
    if((NULL == b) || (b->value == 0))
    {
        return -1;
    }

    printf("value: %d\n", b->value);
}
4

3 に答える 3

2

はい、(NULL != b)前にテストされ(b->value == 0)ます。

あなたがしたことは、短絡評価と呼ばれます。

于 2013-08-28T15:25:57.337 に答える
2

bis NULLthen(NULL != b)falseの場合、2 番目の側がチェックされます。(短絡評価を参照してください)、NULL ptr デリファレンスが発生する可能性があります。

||に変更&&

于 2013-08-28T15:25:04.607 に答える
0

心配する必要はありません。最初の条件によって結果がまだ決定されていない限り、2 番目の条件は実行されません。

于 2013-08-28T15:26:43.650 に答える