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


Ошибка: calloc-overflow

Ошибка санитизатора адресов: calloc-overflow

Функция calloc CRT создает массив в памяти с элементами, инициализированными до 0. Аргументы могут создать внутреннюю ошибку, которая приводит к указателю NULL в качестве возвращаемого значения.

Пример

// example1.cpp
// calloc-overflow error
#include <stdio.h>
#include <stdlib.h>

int number = -1;
int element_size = 1000;

int main() {

    void *p = calloc(number, element_size);      // Boom!

    printf("calloc returned: %zu\n", (size_t)p);

    return 0;
}

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

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

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

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

См. также

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