LINUX.ORG.RU

Почему компилятор разрешает такой код??

 


0

4
#include <iostream>

int main()
{
    int n = 5;
    int *a = new int [n];

    for (int i = 0; i < n; ++i)
        a[i] = i;

    delete[] a;

    for (int i = 0; i < n; ++i)
        std::cout << a[i] << std::endl;

    return 0;
}
$ g++ h2.cpp -o h2 -Wall -Wextra -pedantic
$ ./h2
1603630097
5
-751897228
153970139
4
$ cppcheck h2.cpp
Checking h2.cpp ...
$

И даже чекер не видит явной ошибки О_о

И даже чекер не видит явной ошибки О_о

а код и не является заведомо ошибочным :-)

это-ж С++, может ему delete перегрузили и он теперь просто ставит галочку в недрах «освободить память потом, например при простое системы». Какой-нить нагруженный event-driven у которого нет времени на частое исполнение free()

MKuznetsov ★★★★★
()

clang 16.0: -Weverything:

<source>:6:10: warning: 'a' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]
    int *a = new int [n];
    ~~~~~^~~~~~~~~~~~~~~
<source>:9:9: note: used in buffer access here
        a[i] = i;
        ^
<source>:14:22: note: used in buffer access here
        std::cout << a[i] << std::endl;

https://godbolt.org/z/qe9779Grq

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 1)