Załóżmy, że jest taki kod:
void ProgramGlowny()
{
int* Tablica;
int WielkoscTablicy;
scanf(WielkoscTablicy);
Tablica = new int[WielkoscTablicy];
ProceduraWykonawcza(Tablica);
delete[] Tablica;
}
void ProceduraWykonawcza(int *X)
{
int WielkoscTablicy = ????;
for(int I = 0; I < WielkoscTablicy; I++)
{
X[I] = I;
}
}
W skrócie mówiąc, użytkownik podaje wielkość tablicy, a ona jest potem zapełniana kolejnymi liczbami.
Czytałem, że w tablicach na stercie nie da się wprost odczytać jej wielkości, tylko trzeba mieć dodatkową zmienną, która zawiera wielkość tablicy, ewentualnie pierwszy element może ją mieć lub ostatni element będzie mieć wartość charakterystyczną.
Z drugiej strony, musi gdzieś istnieć informacja o jej wielkości, żeby funkcja delete[] wiedziała, odkąd dokąd ma zwolnić pamięć.
Czy jest jakiś sposób na uzyskanie wielkości tablicy? Czy przy funkcjach działających na takich strukturach trzeba osobno podawać jej wielkość? Skąd delete[] wie, ile bajtów po wskazanym adresie ma uznać za uwolnione?