

デバッグでsampleDataの値を確認すると、`0x00000000<NULL>`となっていましたが、下記のif文の中に入りません。またNULL !=
sampleDataにしてもif文の中の処理にいきません。

[code]

    HRESULT SampleClass::SampleEvent(SAMPLE_DATA** sampleData)
    
    if (NULL == sampleData)
    {
    
    }
    
[/code]

かなり初歩的なことかもしれませんが、もしかして、`0x00000000<NULL>`の表記は、値がNULLであることを指していないのでしょうか？  
それとも、表現の仕方があっているかわかりませんが、sampleDataがNULLに対応していないということでしょうか？

ご教授をお願い致します。


CC BY-SA 4.0
2018-10-22T06:30:24.230
49522
2020-03-22T13:01:15.140
2018-10-22T06:53:11.147
30303
30303
question
c++ visual-studio
NULL判定が意図した通り行われない


質問内容にやや曖昧な部分があって、明確な回答を得られない可能性があります。  
以下の点に注意して、もう一度やってみてはどうでしょう。

(1)当該のコードを含むプロジェクトまたはソリューションを、  
「デバッグの構成」を選択して「ビルド」した(または「フルビルド」した)。  
かつ、それは成功した。

(2)「デバッグの構成」を選択して、または(1)のまま「デバッグ開始した」。  
(注意:VSは「リリースの構成」でも「デバッグ開始」できてしまいます。  
この場合、「ウォッチ」の結果は実際の値を表示できません)

(3)当該の関数内にブレークポイントがあり、そこでブレークした。

(4)引数「sampleData」を「ウォッチペイン」にコピーして値を確認した。  
かつ、sampleDataは0x00000000であった。

(5)かつ、「同名のグローバル変数」「同名のクラスメンバ変数」などは  
存在しないことが確認されている。

(6)「ステップ実行した」が、if( NULL==sampleData)の「真」の判定に入らない。

(7)NULL判定したいのはsampleData(=ポインタのポインタ)であって、  
「*sampleData」(=ポインタ)ではない。  
すなわち、コードは正しい。


CC BY-SA 4.0
2018-10-22T07:19:44.410
49525
2018-10-22T07:19:44.410
3793
49522
answer


sampleClassとSAMPLE_DATAを書いた方が、回答しやすいと思います。  
ちなみに下記のソースでは問題ありませんでした。

[code]

    struct SAMPLE_DATA {
        int a;
        int b;
    };
    class SampleClass {
    public:
        void SampleEvent(SAMPLE_DATA** sampleData);
    
    };
    void SampleClass::SampleEvent(SAMPLE_DATA** sampleData)
    {
        if (NULL == sampleData)
        {
            int aaa = 123;
        }
    
    }
    int main()
    {
        SampleClass *s = new SampleClass();
        s->SampleEvent(NULL);
    }
    
[/code]


CC BY-SA 4.0
2020-02-16T03:43:46.130
63083
2020-02-16T03:43:46.130
24490
49522
answer