C++-ban ha nem adok kezdőértéket alaptípusú változóknak, akkor azon túl, hogy memóriaszemét lesz az értékük, lehet-e ennek valami egyéb következménye?
Alapvetoen semmi baja nem lesz, amig nem hasznalod az erteket. Persze erhetnek kellemetlen meglepetesek:
for(int i; i<10; ++i) {
_ // 1 masodperces szamolas
} // Ez peldaul 8-9 oraig is eltarthat.
Viszont a memoriaszemet ennel komolyabb gondot okozhat pl. pointerek eseten.
Nullpointerre iraskor peldaul egybol hibat kapsz, de nincs minden pointer-muvelet ellenorizve.
#include <iostream>
using namespace std;
int main() {
int a = 5;
for(int i=0; i<24; i+=2) {
cout << *(&a+i) << "\t";
(*(&a+i)) += 1;
cout << *(&a+i) << endl;
}
return 0;
}
Igy peldaul bele lehet nezegetni / irogatni mas programok altal hasznalt memoriateruletbe - mar ameddig az operacios rendszer engedi.
Aztan vannak csunyabb hackek is... Heartbleedrol nemtudom hallottal-e.
Illetve a fuggveny stackje vegen a return address-be is bele lehet irkalni. Mondjuk hogy olyan memoriateruletre ugorjon, ami valami teljesen mast csinal.
Szoval lehet ezzel csunya dolgokat muvelni - de veletlenul nem nagyon fog elofordulni, illetve az oprendszer ugy-ahogy vedekezik a szandekos karokozas ellen.
A változókat nem teheted konstansokká, mert nekik értéket kell adni.
De ha használod ezeket az értékeket, akkor lehet fagyás is a következmény, vagy csak nehezen felderíthető hibák, amik a nem megfelelő értékek miatt adódnak. Jó esetben hibaüzenettel leáll, rosszabb esetben tovább fut, de hibásan. Találd ki, melyik a gyakoribb egy C++ program esetén...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!