Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ошибка:
Ошибка санитизатора адресов: несоответствие между api распределения и размещением сделки
Замечания
Включает обнаружение несогласованных операций памяти во время выполнения, которые могут привести к неопределенному поведению, например:
-
mallocдолжен быть связан сfree, а неdelete.delete[] -
newдолжен быть связан сdelete, а неfree.delete[] -
new[]должен быть связан сdelete[], а неdelete.free
В Windows alloc-dealloc-mismatch обнаружение ошибок по умолчанию отключено. Чтобы включить ее, задайте переменную set ASAN_OPTIONS=alloc_dealloc_mismatch=1 среды перед запуском программы.
Пример
// 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;
}
В командной строке разработчика Visual Studio 2019 версии 16.9 или более поздней выполните следующие команды, чтобы просмотреть пример alloc_dealloc_mismatch:
cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2
Выходные данные
См. также
Обзор AddressSanitizer
Известные проблемы AddressSanitizer
Справочник по сборке и языку AddressSanitizer
Справочник по среде выполнения AddressSanitizer
Теневой байт AddressSanitizer
Облачное или распределенное тестирование AddressSanitizer
Интеграция отладчика AddressSanitizer
Примеры ошибок AddressSanitizer