8

MSVS コンパイラに問題があります。次のコードがあります。

if (!list) {
    *type = raw_data[*i++];
    ptr = (char*) &size;
    ptr[1] = raw_data[*i++];
    ptr[0] = raw_data[*i++];
    name = new char[size+1];
    memcpy (name, raw_data+*i, size);
    name[size] = '\0';
    *i += size;
}

以降:

if (!list) {
    s->name = name;
    s->name_size = size;
}

list の値はこの関数では変更されませんが、このエラーのためにコードをコンパイルできません:

エラー 1 エラー C4703: 初期化されていない可能性のあるローカル ポインター変数 'name' が使用されました

これが警告ではなくエラーであることは非常に腹立たしいと思います。bool を const bool に変更しても役に立ちません。Visual Studio でこの特定のエラーを無視する方法を誰かが知っていますが、それでも他のエラー/警告が表示されますか?

4

2 に答える 2

11

/sdl4703(およびその他のさまざまなもの)を警告ではなくエラーとして処理するようにコンパイラに指示するオプションをコンパイラに渡しているのではないかと思います。

セキュリティについて偏執的であるという文脈では、これをエラーとして扱うのは理にかなっています.コンパイラは、あなたがしていることは安全であることを証明できないので、コードを通過させません. それを望まない場合は、オフにしてください/sdl

于 2013-09-01T14:48:25.043 に答える
8

Visual Studio 2015 で新しいプロジェクト (ウィザード) を作成するときのチェックボックスがありますSDL checks。これが有効になっている場合、Visual Studio は初期化されていない変数を他の可能性のあるものの一部として警告として報告します。 詳細はこちら.

SDL チェックがオンになっているプロジェクトが既にある場合は、以下のスクリーン ショットのように、プロジェクトのプロパティから無効にすることができます。この方法では、コマンド ライン引数の変更に対処する必要はありません。

ここに画像の説明を入力

于 2016-07-18T20:07:18.563 に答える