Witam
Mam takie pytanie. Piszę sobie program w C i doszedłem do działu zajmującego się dynamiczną alokacją pamięci. Zawsze mi się wydawało, że służy ona do tego aby przykładowo powołać do życia tablicę, która nie jest znana w momencie pisania programu. Problem w tym, że napisałem sobie przed chwilą program następujący:
#include <stdio.h>
int main()
{
printf("Podaj liczbe: ");
int liczba;
scanf("%d",&liczba); // podaję 10
printf("Liczba c=%d\n",liczba);
int tablica[liczba];
tablica[2] = 5; // załóżmy że indeks 2 istnieje
printf("%d",tablica[2]);
system("PAUSE");
return 0;
}
i o dziwo działa. Myślałem, że wobec powyższego kompilator zaprotestuje... a tak się nie stało. Czyżby jednak dało się powoływać do życia tablice, których rozmiar zostanie wyliczony w trakcie działania programu? Jeśli tak, to nie bardzo widzę sens stosowania malloc'ów i calloc'ów gdyż jedynie mogłyby się przydać wtedy gdy tablice na których operujemy naprawdę co chwila zmieniają rozmiar i chcemy super zoptymalizować nasz program.