このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
前の操作によって無効になった環境ポインター
setenv
または putenv
ファミリ関数の呼び出しによってポインターの参照先の環境が変更されている
説明
この欠陥は、ホスト環境で操作による環境の変更後に、main() の第 3 引数を使用して環境にアクセスした場合に発生します。ホストされている環境では、多くの C 実装で非標準の構文がサポートされます。
main (int argc, char *argv[], char *envp[])
setenv
または putenv
ファミリ関数の呼び出しにより、*envp
の参照先の環境に変更が加えられます。リスク
setenv
または putenv
ファミリ関数の呼び出しによって環境が変更されると、環境のメモリが再割り当てされる可能性があります。そのホストされている環境のポインターが更新されず、正しくない場所を指す場合があります。このポインターを呼び出すと、予期しない結果が返されたり、プログラムの異常終了が発生したりすることがあります。
修正方法
ホストされている環境のポインターを使用しないようにします。代わりに、グローバル外部変数を使用します。Linux® では environ
、Windows® では _environ
や _wenviron
、またはこれらと同等のグローバル外部変数を使用します。環境を変更すると、これらの変数が更新されます。
例
結果情報
グループ: プログラミング |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: INVALID_ENV_POINTER |
影響度: Medium |
バージョン履歴
R2018a で導入