定数制限付きオブジェクトに書き込んでいます
const 修飾子で宣言されているオブジェクトが変更されている
説明
この欠陥は、次のいずれかが行われた場合に発生します。
const修飾子付きのオブジェクトを代入先として使用する。const修飾子付きのオブジェクトを、引数を変更する関数に渡す。
たとえば、この欠陥は次のような状態で発生します。
const修飾子付きのオブジェクトが、次に挙げるいずれかの関数で最初の引数として渡されている。mkstempmkostempmkostempsmkdtemp
const修飾子付きのオブジェクトが、次に挙げるいずれかの関数の適用先引数として渡されている。strcpystrncpystrcatmemset
const修飾子付きのオブジェクトに対し、書き込み操作が実行されている。
リスク
リスクは、const 修飾子付きオブジェクトに対する変更内容によって異なります。
| 状態 | リスク |
|---|---|
mkstemp、mkostemp、mkostemps、mkdtemp などに渡す | これらの関数では、最初の引数の最後の 6 文字が文字列に置き換えられる。したがって、変更可能な char 配列が最初の引数として必要とされる。 |
strcpy、strncpy、strcat、memset などに渡す | これらの関数では、適用先引数が変更される。したがって、変更可能な char 配列が適用先引数として必要とされる。 |
| オブジェクトへの書き込み | const 修飾子には、そのオブジェクトの値は変更されないという取り決めが含意されている。const 修飾子付きのオブジェクトへの書き込みは、その取り決めに違反する。操作の結果は未定義となる。 |
修正方法
修正方法は、const 修飾子付きオブジェクトに対する変更内容によって異なります。
| 状態 | 修正方法 |
|---|---|
mkstemp、mkostemp、mkostemps、mkdtemp などに渡す | 関数の最初の引数として、非 const オブジェクトを渡す。 |
strcpy、strncpy、strcat、memset などに渡す | 関数の適用先引数として、非 const オブジェクトを渡す。 |
| オブジェクトへの書き込み | 書き込み操作を、非 const オブジェクトに対して実行する。 |
以下の修正例を参照してください。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: CONSTANT_OBJECT_WRITE |
| 影響度: High |
バージョン履歴
R2015b で導入