8

このコード片 (コメント行に注意してください):

#include <malloc.h>

#pragma warning(error: 4701)

int main(){
    char buffer[1024];
    //buffer[0] = 0;

    void *p;
    int size = 1;
    if (size < 2)
        p = malloc(size);
    free(p); // C4701
    return 0;
}

次の警告が表示されます (予想どおり)。

f:\d\warning.cpp(13) : error C4701: potentially uninitialized local variable 'p' used

ただし、で割り当てのコメントを外すmain()と、警告は表示されなくなります。実行時エラー チェック/RTC1を有効にするコマンド ライン オプションを使用してコンパイルしています。

cl.exe /RTC1 warning.cpp

Visual C++ 2013 および 2015 の最新の 64 ビット バージョンのコンパイラを試しました。どちらも同じ動作をしています。

質問: これはコンパイラのバグですか、それとも説明がありますか? Microsoft のドキュメントには、C4701 が指定された場所で /RTC1 が実行時エラーを発生させる可能性があると記載されていますが、警告が抑制されることについては何も記載されていません。

編集:buffer[0] = 0;不可解な部分は、コメントにない場合にのみ警告が消えることです。

4

1 に答える 1