オーバーラップするメモリのコピーです
コピー関数のソース引数とコピー先引数にオーバーラップするメモリがある
説明
この欠陥は、memcpy や strcpy などのコピー関数のコピー元引数とコピー先引数の間にメモリ オーバーラップがある場合に発生します。たとえば、strcpy のソース引数とコピー先引数が、同じ文字列の異なった要素を指すポインターである場合などです。
リスク
コピー関数のソース引数とコピー先引数の間にメモリ オーバーラップがある場合、C 標準によると、動作は未定義になります。
修正方法
メモリ オーバーラップが望ましいものであるかどうかを判断します。もしそうであれば、代替となる関数を見つけます。次に例を示します。
memcpyを使用して値を 1 つのメモリ位置から別のメモリ位置にコピーしている場合は、memmoveをmemcpyの代わりに使用します。strcpyを使用して 1 つの文字列を別の文字列にコピーしている場合は、次のように、memmoveをstrcpyの代わりに使用します。s = strlen(source); memmove(destination, source, s + 1);
strlenは null 終端を除いた文字列長を決定します。したがって、sバイトではなくs+1バイトを移動させなければなりません。
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: OVERLAPPING_COPY |
| 影響度: Medium |
バージョン履歴
R2015b で導入