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:
Erro do Address Sanitizer: Incompatibilidade entre APIs de alocação e desalocação
Observações
Permite a deteção em tempo de execução de operações de memória incompatíveis que podem levar a um comportamento indefinido, como:
-
mallocdeve ser emparelhado comfree, nãodeleteoudelete[]. -
newdeve ser emparelhado comdelete, nãofreeoudelete[]. -
new[]deve ser emparelhado comdelete[], nãodeleteoufree.
No Windows, alloc-dealloc-mismatch a deteção de erros está desativada por padrão. Para habilitá-lo, defina a variável set ASAN_OPTIONS=alloc_dealloc_mismatch=1 de ambiente antes de executar o programa.
Exemplo
// example1.cpp
// Demonstrate alloc-dealloc-mismatch error
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if (argc != 2) return -1;
switch (atoi(argv[1]))
{
case 1:
delete[](new int[10]);
break;
case 2:
delete (new int[10]); // Boom!
break;
default:
printf("arguments: 1: no error 2: runtime error\n");
return -1;
}
return 0;
}
Em um prompt de comando do desenvolvedor do Visual Studio 2019 versão 16.9 ou posterior, execute os seguintes comandos para ver um exemplo de:alloc_dealloc_mismatch
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Resultado
Ver 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