Поделиться через


Ошибка: invalid-allocation-alignment

Ошибка санитизатора адресов: недопустимое выравнивание выделения

Для _aligned_malloc выражения выравнивания функция требуется значение 2. Мы имитируем вычисление "внешнего" коэффициента выравнивания с помощью неоптимизированной глобальной переменной.

Пример

// example1.cpp
// invalid-allocation-alignment error
#include <Windows.h>

int ExternalAlign = 5;

int main(){

    // this externally calculated alignment of 5 isn't valid.

    void* ptr = _aligned_malloc(8,ExternalAlign); 
    return (ptr == nullptr && errno == EINVAL) ? 0 : -1;
}

Чтобы создать и проверить этот пример, выполните следующие команды в командной строке разработчика Visual Studio 2019 версии 16.9 или более поздней:

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

Результирующая ошибка

Снимок экрана: отладчик, отображающий ошибку выравнивания с недопустимым распределением в примере 1.

См. также

Обзор AddressSanitizer
Известные проблемы AddressSanitizer
Справочник по сборке и языку AddressSanitizer
Справочник по среде выполнения AddressSanitizer
Теневой байт AddressSanitizer
Облачное или распределенное тестирование AddressSanitizer
Интеграция отладчика AddressSanitizer
Примеры ошибок AddressSanitizer