錯誤: strncat-param-overlap
位址清理程式錯誤:strncat-param-overlap
在重疊緩衝區中移動記憶體的程式代碼可能會導致難以診斷的錯誤。
範例
此範例示範 AddressSanitizer 如何攔截 CRT 函式重疊參數所造成的錯誤。
(根據 llvm-project/compiler-rt/test/asan/TestCases/strncat-overlap.cpp.
// example1.cpp
// strncat-param-overlap error
#include <string.h>
void bad_function() {
char buffer[] = "hello\0XXX";
strncat(buffer, buffer + 1, 3); // BOOM
return;
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
若要建置及測試此範例,請在Visual Studio 2019 16.9版或更新版本的 開發人員命令提示字元中執行下列命令:
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
產生的錯誤
另請參閱
AddressSanitizer 概觀
AddressSanitizer 已知問題
AddressSanitizer 組建和語言參考
AddressSanitizer 運行時間參考
AddressSanitizer 陰影位元組
AddressSanitizer 雲端或分散式測試
AddressSanitizer 調試程式整合
AddressSanitizer 錯誤範例