Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
funkcie v C a C + + sa správajú , ako sa očakávalo , v porovnaní s inými programovacími jazykmi . Funkcie existujú , rovnako ako akékoľvek iné premenné alebo systémové informácie v pamäti a sú odvolával sa na základe adresy . Funkcie , ktoré samy o sebe , sú len bloky kódu v pamäti , ktoré sú uvedené . Akákoľvek chyba vyvolaná odkazom funkcia môže byť v dôsledku nelegálnej funkcie , alebo funkcie nazýva nesprávne . Chyba pretečenia bufferu by s väčšou pravdepodobnosťou pochádzajú z kódu vnútri funkcie .
Premenné a pamäti
C + + je staticky napísaný , čo znamená , že programátor musí špecifikovať typ premennej pri deklarovaní premennej . To je preto , že C + + zruší pamäťových blokov určitej veľkosti na základe premennej typu . Číslo ( int ) premenná deklarovaná v programe dostanú priestor v pamäti zrušil špeciálne pre int . Blok pamäte bude presná veľkosť celé číslo .
Pole
polia sú kolekcie premenných obsiahnutých v jedno meno . Napríklad , pod pole vytvorí zoznam 10 čísel , ktoré sú prístupné pomocou odkazu index ( názov [ 0 ] , názov [ 1 ] , atď )
int názov [ 10 ] ;
Namiesto jednej celé číslo , pole vyčleňuje dostatok kontinuálne priestor pre 10. Avšak, pretože prístup index poľa môže byť pokus o hodnotách nad rámec toho , čo je obsiahnuté v poli ( meno [ 11 ] , napríklad ) , môže dôjsť k chybám , ak programátor nie je sledovať , ako sa používa pole .
Buffer Overflow
Vzhľadom na povahu polí v C + + , pole vnútri funkcie môže obetí pretečeniu vyrovnávacej pamäti . Ak užívateľ zadá znak vstup väčší ako pole môžete zvládnuť , budú nadbytočné znaky prepísať dáta , priľahlé k poľu v pamäti . Napríklad ,
void Príklad ( ) { int
login [ 15 ] ;
int i = 0 ;
while ( cin >> [ i ] ) {
i + + ;
}
}
" , zatiaľ čo " loop nikdy neskončí , a v čase, keď " i " dosiahne 15 , sa používateľ spustiť vkladanie dát , ktorý prepíše pamäť . To môže mať nezamýšľané dôsledky , ako je napríklad preradenie lokálne premenné , alebo , za určitých okolností , prepisovanie funkčných ukazovateľov na odkazujú na iný , škodlivý kód .