Tablica statyczna - dlaczego to sie kompiluje

Witam. Ostatnio analizowalem taki fragment kodu.

Int n;

cout«“podaj n”«endl;

cin»n;

float a[n];

Nastepnie byla inicjalizacja wartosci w tablicy za pomoca petli for. Ko.mpilator to gcc, a program to codeblocks. Dlaczego takie cos sie kompiluje, skoro rozmiaru tablicy nie znamy w momencie kompilacji? Przeciez to nie tablica dynamiczna…

A sprawdzałeś działanie programu? To, że coś się skompiluje, nie znaczy, że zadziała w ogóle lub zgodnie z oczekiwaniami. Nie testowałem tego, ale może jest tak, że ponieważ nie masz przypisanej wartości dla zmiennej n to kompilator przyjmuje, że jest to wartość 0 (zero) i deklaruje tablicę pustą (float a[0]). Uruchomienie programu się może uda, ale jeśli gdzieś będziesz miał odwołania do jakiegoś elementu tej tablicy (np. a[1]=1;), to nastąpi błąd (run-time error).

:arrow: http://gynvael.coldwind.pl/?id=300

Nie jest to zgodne ze standardem C++ ale jest zgodne z C99 i niektóre kompilatory obsługują to również dla C++.

Nie powinno być może

float* a = new float[n];

?

No wlasnie wszystko liczy poprawnie i nic nie wykrzacza. A powinno byc tak jak pisze kolega wyzej.

Dodane 21.03.2013 (Cz) 18:30

Rolek0 chyba wszystko juz wyjasnil;) dzieki;)