エラー: memcpy-param-overlap
Address Sanitizer エラー: memcpy-param-overlap
CRT 関数 memcpy
は、重複するメモリをサポートしません。 CRT は、重複するメモリ memmove
をサポートする memcpy
の代替手段を提供します。
一般的なエラーとして、memmove
を memcpy
と同じ意味を持つものとして扱うことがあります。
例
// example1.cpp
// memcpy-param-overlap error
#include <string.h>
__declspec(noinline) void bad_function() {
char buffer[] = "hello";
memcpy(buffer, buffer + 1, 5); // BOOM!
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
この例をビルドしてテストするには、Visual Studio 2019 バージョン 16.9 以降の開発者コマンド プロンプトで次のコマンドを実行します。
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
/Oi フラグは、組み込み関数として扱memmove
memcpy
うようにコンパイラに指示します。 これは、一部のバージョンの標準ライブラリが同じように実装memcpy
memmove
されるために必要です。 ASAN は動的分析ツールであるため、監視可能なランタイム効果を持つエラーのみを検出します。
結果のエラー
関連項目
AddressSanitizer の概要
AddressSanitizer の既知の問題
AddressSanitizer のビルドと言語リファレンス
AddressSanitizer ランタイム リファレンス
AddressSanitizer シャドウ バイト
AddressSanitizer クラウドまたは分散テスト
AddressSanitizer デバッガーの統合
AddressSanitizer エラーの例
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示