1 / 4
Apr 2017

https://scr.hu/zO0d6M42

Na czym polegają błędy?
Nie mogę stworzyć tablicy przechowującej 'ilosc' zmiennych?

W Visual'u nie kompiluje, za to w CodeBlocks wszystko działa jak należy, sędzia także zaakceptował.
Przerzucam się na VS i nie dokońca rozumiem dlaczego nie kompiluje tutaj często tego, co w innych środowiskach jest kompilowane

  • created

    Apr '17
  • last reply

    Apr '17
  • 3

    replies

  • 526

    views

  • 3

    users

  • 2

    likes

  • 1

    link

Rozmiar statycznej tablicy musi być znany na etapie kompilacji, co tutaj się nie uda, gdyż 'ilosc' jest wartością wprowadzaną przez użytkownika. Zakładając, że znasz dynamiczną alokację pamięci:
21) float* liczby = new float[ilosc]; // ilosc nie powinna byc ujemna
po zakończeniu sumowania, warto zwrócić systemowi zabraną pamięć
29) delete[] liczby;

Dzięki, pewnie że znam. Po prostu nie rozumiem dlaczego nie przechodzi to przez VS'a, ale za to sędzia i CodeBlocks to normalnie kompiluje, bez wyrzucania błędu.

Tablice zadeklarowane w ten sposób to tak zwane Variable Length Arrays (VLA). Nie są częścią standardu języka C++, natomiast są akceptowane przez gcc /clang.

Generalnie lepiej ich unikać, w szczególności jeśli potrzebna będzie większa ilość pamięci, ponieważ alokowane są na stosie który zazwyczaj jest zdecydowanie mniejszy niż sterta. Nie wspominając o braku możliwości wykrycia nieudanej alokacji (to z punktu widzenia SPOJa to nie jest specjalnie istotne).