C/Tablice: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
Linia 109:
Pomimo swej wygody '''tablice statyczne''' mają ograniczony, z góry zdefiniowany rozmiar, którego nie można zmienić w trakcie działania programu. Dlatego też w niektórych zastosowaniach tablice statyczne zostały wyparte '''tablicami dynamicznymi''', których rozmiar może być określony w trakcie działania programu. Zagadnienie to zostało opisane w [[C/Wskaźniki#Dynamiczna alokacja pamięci|następnym rozdziale]].
 
{{Uwaga|Przy używaniu tablic trzeba być szczególnie ostrożnym przy konstruowaniu pętli, ponieważ ani kompilator, ani skompilowany program nie będą w stanie wychwycić przekroczenia przez indeks rozmiaru tablicy <ref>W zasadzie kompilatory mają możliwość dodania takiego sprawdzania, ale nie robi się tego, gdyż znacznie spowolniłoby to działanie programu. Takie postępowanie jest jednak pożądane w okresie testowania programu.</ref>. Efektem będzie odczyt lub zapis pamięci, znajdującej się poza tablicą.}}
{{infobox|[[C++/Różnice między C a C++|Programiści C++]] mogą użyć [[C++/Vector|klasy vector]], która może być wygodnym zamiennikiem tablic.}}
 
Wystarczy pomylić się o jedno miejsce (tzw. błąd [[w:off by one|off by one]]) by spowodować, że działanie programu zostanie nagle przerwane przez system operacyjny:
<source lang="c">
int foo[100];
int i;
for (i=0; i<=100; i|=1) /* powinno być i<100 */
foo[i] = 0;
 
/* program powinien zakończyć się błędem */
</source>
 
==Zobacz również ==