Dynamiczne alokowanie pamięci w tablicy C++, BŁĄD

0

Witam.

Pytanie dość trywialne...

Dlaczego mój kompilator (QTCreator MinGW) Kompiluje ten kod bez żadnych ostrzeżeń...

    int ile = 0;

    cin >> ile;
    int tablica [ile];

Przecież tutaj nie można w ten sposób przydzielać komórek tablicy bez dynamicznego przydzielania pamięci...

Wytłumaczy to ktoś ?

0
DnwK napisał(a):

Witam.

Pytanie dość trywialne...

Dlaczego mój kompilator (QTCreator MinGW) Kompiluje ten kod bez żadnych ostrzeżeń...

    int ile = 0;

    cin >> ile;
    int tablica [ile];

Przecież tutaj nie można w ten sposób przydzielać komórek tablicy bez dynamicznego przydzielania pamięci...

Wytłumaczy to ktoś ?

VLA (ang. variable sized arrays) to nie jest część standardu c++ więc ma prawo się nie kompilować pod pewnymi kompilatorami. To co chcesz zrobić to:

int ile = 0;
cin >> ile;
std::vector<int> tablica(ile);
0
DnwK napisał(a):

Witam.

Pytanie dość trywialne...

Dlaczego mój kompilator (QTCreator MinGW) Kompiluje ten kod bez żadnych ostrzeżeń...

    int ile = 0;

    cin >> ile;
    int tablica [ile];

Przecież tutaj nie można w ten sposób przydzielać komórek tablicy bez dynamicznego przydzielania pamięci...

Wytłumaczy to ktoś ?

Normalnie, na stosie jest odejmowane tyle bajtów ile potrzeba.
Czemu miało by to nie działać?

Dynamicznie alokowana pamięć to nie tylko sterta.

1

Miałoby nie działać, bo standard nic nie mówi o tym, że działać powinno. Nie zabrania też jednak implementowania tego, więc większość kompilatorów to robi, ale jak się wyłączy niestandardowe rozszerzenia (np. kompilując z flagami -std=c++14 -pedantic-errors zamiast domyślnego -std=gnu++14 dla gcc), to nagle działać przestanie.

5

Standard C++ mówi, że to nie ma prawa działać (rozmiar tablicy musi być stałą w czasie kompilacji - inaczej kod jest ill-formed i nie ma prawa się skompilować). A że kompilatory domyślnie serwują niestandardowe rozszerzenia to inna sprawa.

Tak przy okazji, standard C nic nie mówi gdzie VLA mają być alokowane, więc wcale nie muszą być na stosie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1