Kezdőoldal » Számítástechnika » Programozás » C++-ban ha nem adok kezdőérték...

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?

Figyelt kérdés
(Pl. ilyesmire gondolok, hogy lefagyhat-e a program ettől).

2016. máj. 17. 16:50
1 2
 1/12 anonim ***** válasza:
0%
Probald ki
2016. máj. 17. 17:16
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:
Kipróbáltam, és nálam nem okozott semmi egyéb problémát, de épp azért kérdezem, mert ettől még nem biztos, hogy nem is okozhat bizonyos esetben.
2016. máj. 17. 17:19
 3/12 anonim ***** válasza:
Igazabol en nem talalkoztam meg problemaval, de ha gondot okozna valahol akkor adaz neki valami fals erteket azt ennyi
2016. máj. 17. 17:27
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
37%
Attól függ, mit kezdesz az értékével. Ha mondjuk pointerként vagy tömbindexként akarod később használni, akkor okozhat gondot.
2016. máj. 17. 17:31
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:
Jogos, köszi!
2016. máj. 17. 17:35
 6/12 anonim ***** válasza:
0%
A másik, hogy ha előbb-utóbb értéket kell adnod neki, akkor érdemes azt a definíciónál, mert azt egy lépésben megcsinálja, gyorsabb kódot fordít a fordító.
2016. máj. 17. 17:42
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
0%
Egyébként fordítótól függ, de általában az inicializálatlan változók is implicit kapnak egy nulla értéket. :)
2016. máj. 17. 17:45
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:

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.

2016. máj. 17. 17:48
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
Önmagában az hogy nem adsz neki kezdőértéket nem tud problémát okozni. Az tud problémát okozni hogy felhasználod a benne lévő memóriaszemetet, mert elfelejtettél értéket adni neki.
2016. máj. 17. 17:55
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
58%

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...

2016. máj. 17. 18:18
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!