Witam.
W "Symfonii C++" przeczytałem: "Rozmiar tak definiowanej tablicy musi być stałą całkowitą - i to znaną już w takcie kompilacji. Kompilator bowiem musi już wtedy wiedzieć ile miejsca ma zarezerwować na daną tablicę".
Do tego jest przykład w którym jest błąd.
Przykład jest bardzo podobny do programu, który napisałem, a w którym błędu nie ma:
#include<cstdio>
int main()
{
int n;
printf("Wprowadz ilosc elementow tablicy ");
scanf("%d",&n);
int a[n];
printf("Wprowadz elementy tablicy\n");
for(int i=0;i<n;i++) // wprowadzanie elementow tablicy
scanf("%d",&a[i]);
printf("\nElementy tablicy to:");
for(int i=0;i<n;i++)
printf("\n%d", a[i]); // wypisywanie elementow tablicy
return 0;
}
Tutaj mam pytanie - skoro taki program się kompiluje, to skoro kompilator ma wiedzieć w czasie kompilacji jaki rozmiar ma mieć tablica, to czy w tym wypadku rezerwuje miejsce w pamięci na 2^31 zmiennych typu int?
Bo w takim razie taki zabieg jest kompletnie nieopłacalny ze względu na marnowanie pamięci. Wcześniej myślałem, że C++ tworzy sobie takie tablice podczas działania programu (i zajmuje dzięki temu tyle pamięci ile wynosi wprowadzone n), dlatego się pytam jak to jest z tą zajętą pamięcią.