Udostępnij za pośrednictwem


Błąd: calloc-overflow

Błąd rozwiązania Sanitizer: calloc-overflow

Funkcja calloc CRT tworzy tablicę w pamięci z elementami zainicjowanymi do 0. Argumenty mogą utworzyć błąd wewnętrzny, który prowadzi do wskaźnika NULL jako wartości zwracanej.

Przykład

// 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;
}

Aby skompilować i przetestować ten przykład, uruchom następujące polecenia w wierszu polecenia programu Visual Studio 2019 w wersji 16.9 lub nowszej:

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

Wynikowy błąd

Screenshot of debugger displaying calloc-overflow error in example 1.

Zobacz też

AddressSanitizer — omówienie
Rozwiązywanie znanych problemów z programemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego AddressSanitizer)
Bajty w tle addressSanitizer
AddressSanitizer — chmura lub testowanie rozproszone
Integracja debugera AddressSanitizer
Przykłady błędów addressSanitizer