38987

38987



109


CIEKAWOSTKI

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 1. Efektem będzie odczyt lub zapis pamięci, znajdującej się poza tablicą.


Wystarczy pomylić się o jedno miejsce (tzw. błąd off by one) by spowodować, że działanie programu zostanie nagle przerwane przez system operacyjny:

int foo[100]; int i;

for (i«0; i<-100; ++i) /• powinno być i<100 */ foo[i] = 0;

Ciekawostki

W pierwszej edycji konkursu IOCCC zwyciężył program napisany w C. który wygląda! dość nietypowo:

short mainD ■ {

277, 04735, -4129, 25, 0, 477, 1019, 0xbef, 0, 12800,

-113, 21119, 0x52d7, -1006, -7151, 0, 0x4bc, 020004,

14880, 10541, 2056, 04010, 4548, 3044, -6716, 0x9,

4407, 6, 5568, 1, -30460, 0, 0x9, 5570, 512, -30419,

0x7e82, 0760, 6, 0, 4, 02400, 15, 0, 4, 1280, 4, 0,

4, 0, 0, 0, 0x8, 0, 4, 0, V, 0, 12, 0, 4, 0,

0, 020, 0, 4, 0, 30, 0, 026, 0, 0x6176, 120, 25712,

’p\ 072163, ’r\ 29303 , 29801, 'e*

>;

Co ciekawe program ten bez przeszkód wykonywał się na komputerach VAX-łl oraz PDP-11. Cały program to po prostu tablica z zawartym wewnątrz kodem maszynowym! Tak naprawdę jest to wykorzystanie pewnych właściwości programu, który ostatecznie produkuje kod maszynowy. Linkcr (to o nim mowa) nie rozróżnia na dobrą sprawę nazw funkcji od nazw zmiennych, więc bez problemu ustawił punkt wejścia programu na tablicę wartości, w których zapisany był kod maszynowy'. Tak przygotowany program został bez problemu wykonany przez komputer.

'W zaradzić kompilatory mają możliwość dodania takiego sprawdzania, ale nie robi się tego. gdyż znacznie (Spowolniłoby to działanie programu. Takie postępowanie jc*t jednak pożądane w okresie testowania programu.



Wyszukiwarka

Podobne podstrony:
ksiazka(086) Ostrzeżenie Po wyłączeniu zapłonu należy być szczególnie ostrożnym i dokładnym w swych
ksiazka(086) Ostrzeżenie Po wyłączeniu zapłonu należy być szczególnie ostrożnym i dokładnym w swych
Zachowaj ostrożność! Przy dokręcaniu płyty głównej musisz zachować szczególną ostrożność, by
Elementy macierzy (tablicy) mogą być zadawane przy pomocy wyrażeń, mogą ponadto być liczbami
s11 (11) hamulców musiało być bardzo ostrożne — także przy kołowaniu, które z powodu ograniczonej wi
Segregator1 Strona0 Uwaga! Zachowaj szczególna ostrożność przy odmierzaniu i przelewaniu roztw
004 Plecak z pomocą Plecak z Pomocą Nie wiadomo, co przyda się podczas spótkania z nieznajomymi dlat
bezpieczne dziecko zestaH85 NIEBEZPIECZNE ZABAWY Z OGNIEM Żelazko to nie zabawka Z gazem trzeba być
239 Holowanie przyczepy Zasady jazdy__Jazda z przyczepę wymaga szczególnej ostrożności. Środek ciężk
CCF20100608037 * Przy użyciu każdej z tablic powinien być obliczony poziom naprężeń w stali na pods
CCF2012121522 (2) 157 FIREWALL Trzeba być świadomym, iż każdy komputer podłączony do sieci (szczegó
Czy w wyjątkowej sytuacji np.ratowania życia, przy zachowaniu szczególnej ostrożności,możesz
skanowanie0092 Trzeba być wielkim specjalistą od geografii tych ścieżek. Kto jej nie zna - zabłądzi;

więcej podobnych podstron