va_list 引数が無効です
変数の引数リストが、va_end での無効化後に使用されているか、va_start または va_copy で初期化されていない
説明
この欠陥は、変数 va_list を vprintf グループの関数の引数として使用する一方で、以下が該当する場合に発生します。
変数が、
va_startまたはva_copyを使用して前もって初期化されていない。変数が、
va_endを使用して前もって無効化され、かつ再初期化されていない。
たとえば、関数 vsprintf を vsprintf (buffer,format, args) として呼び出すとします。しかし、関数呼び出しの前に、va_list 変数 args が次のいずれによっても初期化されていません。
va_start(args, paramName)。paramNameは可変引数関数の最後の名前付き引数です。たとえば、関数定義void func(int n, char c, ...) {}では、cが最後の名前付き引数となります。va_copy(args, anotherList)。anotherListは別の有効な変数va_listです。
リスク
初期化されていない va_list 引数の動作は未定義となります。初期化されていない va_list 引数で関数を呼び出すと、スタック オーバーフローの原因となることがあります。
修正方法
va_list 変数を関数の引数として使用する前に、va_start または va_copy で初期化します。
変数の使用がすべて終了してから、va_end を使用しで変数をクリーンアップします。
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: INVALID_VA_LIST_ARG |
| 影響度: High |
バージョン履歴
R2015b で導入