Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Erro:
Endereço Sanitizer Error: memcpy-param-overlap
Observações
Note
O /Oi sinalizador é necessário para detetar memcpy-param-overlap erros de forma confiável. Este sinalizador diz ao compilador para tratar memcpy e outras funções como intrínsecas, o que é necessário porque algumas versões da biblioteca padrão implementá-los como tal. Como o ASan é uma ferramenta de análise dinâmica, ele só pode detetar erros com um efeito de tempo de execução observável. Observe que, quando /O2 também é definido, o ASan pode não ser capaz de detetar memcpy-param-overlap erros de forma confiável porque a variante intrínseca dessas funções não tem garantia de ser usada. Para obter mais informações, consulte /Oi documentos.
A função memcpy CRT não suporta memória sobreposta. O CRT fornece uma alternativa para memcpy que suporta memória sobreposta: memmove.
Um erro comum é tratar memmove como sendo semanticamente equivalente a memcpy.
Example
// 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;
}
Para criar e testar este exemplo, execute estes comandos em um prompt de comando do desenvolvedor do Visual Studio 2019 versão 16.9 ou posterior:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
Erro resultante
Consulte também
Visão geral do AddressSanitizer
AddressSanitizer problemas conhecidos
de compilação e referência de linguagem AddressSanitizer
de referência de tempo de execução AddressSanitizer
AddressSanitizer shadow bytes
AddressSanitizer na nuvem ou de testes distribuídos
de integração do depurador AddressSanitizer
Exemplos de erro AddressSanitizer