Bagikan melalui


Kesalahan: alloc-dealloc-mismatch

Kesalahan Address Sanitizer: Ketidakcocokan antara Alokasi dan API dealokasi

Fungsionalitas alloc/dealloc yang tidak cocok di AddressSanitizer nonaktif secara default untuk Windows. Untuk mengaktifkannya, jalankan set ASAN_OPTIONS=alloc_dealloc_mismatch=1 sebelum menjalankan program. Variabel lingkungan ini diperiksa pada runtime untuk melaporkan kesalahan pada malloc/delete,free/new , dan .new/delete[]

Contoh

// example1.cpp
// 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;
}

Untuk membuat dan menguji contoh ini, jalankan perintah ini di perintah Visual Studio 2019 versi 16.9 atau yang lebih baru:

cl example1.cpp /fsanitize=address /Zi
set ASAN_OPTIONS=alloc_dealloc_mismatch=1
devenv /debugexe example1.exe 2

Kesalahan yang dihasilkan

Cuplikan layar debugger menampilkan kesalahan alloc-dealloc-mismatch dalam contoh 1.

Lihat juga

Gambaran umum AddressSanitizer
Masalah yang diketahui AddressSanitizer
Referensi bahasa dan build AddressSanitizer
Referensi runtime AddressSanitizer
Byte bayangan AddressSanitizer
AddressSanitizer cloud atau pengujian terdistribusi
Integrasi debugger AddressSanitizer
Contoh kesalahan AddressSanitizer