Kezdőoldal » Számítástechnika » Programozás » Mit jelent pontosan ez a...

Mit jelent pontosan ez a hibs? C++

Figyelt kérdés

Itt egy kép az consolról:

[link]

Itt pedig a forráskód (bocs, de nincs kommentelve):

[link]


2015. jún. 19. 15:45
 1/9 A kérdező kommentje:
A 2. link egy pastebin-es kód, csak nem engedte nyersen felrakni.
2015. jún. 19. 15:46
 2/9 A kérdező kommentje:
A hiba gondolom a 140. sor körül van.
2015. jún. 19. 15:46
 3/9 iostream ***** válasza:
Telerakod kiiratással (cerr-re írj, az nem bufferelt), és kiderül, hogy száll el. Vagy debuggold direktebb eszközökkel.
2015. jún. 19. 15:57
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

Amikor i=2040 akkor száll el. A hossz=2042.

Még nézem egy kicsit :/

2015. jún. 19. 16:09
 5/9 A kérdező kommentje:
A program végig megy az összes virágon, de viszont i akkor is csak 2040. Túlindexelésre gyanakszom.
2015. jún. 19. 16:12
 6/9 A kérdező kommentje:
Megvan... a beolvasandó fájl végén volt egy üres sor. Így a hossz 1-el több volt a kelleténél.
2015. jún. 19. 16:15
 7/9 anonim ***** válasza:

Legközelebb ha ilyen hibával találkozol, először nézd meg hogy mi dobta és mit jelent.


A console szerint a string erase függvénye dobott egy out_of_range kivételt. Megkeresed google-lel hogy mit jelent ez:

[link]


Azt írja: If pos is greater than the string length, an out_of_range exception is thrown.


Tehát az erase függvények az első paramétere nagyobb mint a szöveg hossza, túlindexelsz.


Ilyenkor két dolgot lehet csinálni: ha debuggerrel indítod a programot, az automatikusan elkapja a kivételt és megtudod nézni a változók értékeit. Másik lehetőség hogy te kapod el a kivételét íratod ki a változók értékeit. Kivétel elkapása a try-catch kulcsszavakkal történik, ha követed az out_of_range linkjét ide visz az oldal, ahol példát is mutatnak az elkapására és a kiíratására:

[link]


Ha kiírod hogy melyik sorban történt, milyen hosszú a string és mekkora a hossza, mennyi az i és a j változók értéke, stb, akkor elég egyértelműen látszik mi történik és miért. (utolsó sorban vagy egy üres string, a j növelése pedig nem áll le mert az üres stringben nincs szóköz)


Ez csak azért írtam le neked mert rengetegszer fordulhat elő hogy a programot hibát ír és megvannak a módszerek arra hogy hogyan találd meg a hibát, hát használd ki. A hibaüzenet nem azért van hogy megszívasson hanem hogy segítsen, tessék elolvasni és felhasználni az információt.

2015. jún. 19. 16:37
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
Köszi ^^
2015. jún. 19. 18:10
 9/9 anonim ***** válasza:

Ugyan azt az értéket vizsgálod az if feltételekben, de egyszer sem változik ezek közt az értéke így else if lenne a helyes, bár itt már a switch átláthatóbb lenne.

Mutatók használatának ebben a formában pedig értelme nincs, csak a memória szivárog mert egyiket sem törlöd amint már nincs rá szükség.

2015. jún. 19. 19:02
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, 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!