2012-03-10 6 views
0

VS11でC++のコード解析を実行すると、多くの誤検出がありました。例えば、私は数ダースのスイッチがあり、それは私のポインタがnullかもしれないと言います。スイッチ内のすべてのケース(少なくとも1つのケース)では、ポインタが設定され、デフォルトではassert(0)と例外をスローするmy関数が呼び出されます。私は、アサーションと例外がメソッドにあるので、ポインタがnullであることが不可能であることを認識していないと思います。どのように私はそれをヒントまたは修正するので、このような偽陽性が現れないでしょうか?VS11コード分析のヒント?

答えて

1

デフォルトのケースで呼び出されたメソッドが何も返さない場合は、デフォルトの場合にポインタに割り当てられる「偽の」null値を返すようにすることができます。

Type* MyClass::methodCalledInDefaultCase() 
{ 
    pointer = 0; 
    assert(0); 
    throw Exception; 
    return 0; // Hope this doesn't cause unreachable code warning 
} 

void MyClass::myMethod() 
{ 
    pointer = 0; 
    switch(whatever) 
    { 
     case foo: 
      ... 

     case bar: 
      .... 

     default: 
      pointer = methodCalledInDefaultCase(); 
      break; 
    } 
} 

希望します。

+0

ああ。これはうまくいくと思いますが、fakeptr()テンプレートを作成して、それを欺くためのポインタを返すようにしても良いでしょう(偽ではあるが便利なauto_castに似ています) –

関連する問題