Kezdőoldal » Számítástechnika » Programozás » C++ konstruktor "Cannot...

C++ konstruktor "Cannot access memory at address .." és "Duplicate variable object name" hiba?

Figyelt kérdés

Az alábbi a kódrészlet: [link]

A program lefut, de debuggerrel végignézve látszik, hogy amint belép a konstruktorba, az N=szam-nál "Cannot access memory at address .." hibát dob, m = 0-ra pedig "Duplicate variable object name"-et.

Mi lehet a gond?



2020. okt. 9. 15:33
 1/6 anonim ***** válasza:
Hol példányosítod ezt a struct-ot?
2020. okt. 9. 15:56
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Milyen debuggerrel próbáltad? Nálam működik a kódrészlet, simán tudom debuggolni és nem ír ki semmit.


[link]

2020. okt. 9. 16:02
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

Nos azért vannak ebben erően hibák/hibalehetőségek, amire jelezhette ezt.

Először is, ha függvényen kívül hívod meg a konstruktort, akkor globális memóriaterületre kerül, és a fura memóriakezelésed miatt lehet hogy elmászik a memória. Én inicializálnám nullptr-re az in és out paramétereket, és megnézném egy try-catch blokkban, lehet hogy nem olyan sorrendben futnak le a sorok, ahogy azt te várod (nem tudok jobbat mondani, amíg a hívás helyét és úgy egyben az egészet nem látom).

Aztán az is súlyos hiba, hogy nem látok semmilyen destruktort, azaz amit new-val lefoglalsz, nem szabadul fel.

Hibalehetőség még, hogy ha jól látom, te vectorokból akarsz tömböt csinálni. Ebben az esetben az in és out-nál pointer helyett lehet hogy érdemesebb lenne tömböt jelölni, a fordító hátha úgy okosabb. De amúgy meg igen, sokkal bővebb infó kell.

2020. okt. 9. 19:06
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
100%
Uhh, mekkora marhaságot írtam, bocs. :) (1)
2020. okt. 10. 09:42
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

Köszönöm a válaszokat.

3.: a nullptr jó ötlet. Amúgy van destruktor is, ahol delete-eltem a new-val létrehozott dolgokat, tényleg beleírhattam volna a megosztott kódba is.


Az viszont miért baj, ha egy tömbben vektorokat tárolok?

(Azért van ott pointer, mert nem tudom előre a méretét a tömbnek)

2020. okt. 12. 12:42
 6/6 anonim ***** válasza:

Nem baj, hogy tömbben vektorokat tárolsz, csak zavaró lehet a kezelése.

Amúgy azért lehet rossz tervezés, mert nem derül ki belőle, mit akarsz vele kezdeni. Ha kétdimenziós tömböt, azaz mátrixot akarsz implementálni, akkor vagy vektor-vektor párral érdemes, vagy vektor<int,int> például, vagy dupla tömb, azaz int[][].

Erre pedig: "Azért van ott pointer, mert nem tudom előre a méretét a tömbnek"; értem én, tudom mire gondolsz, csak így gondoltam, és az is ptr, csak látszik hogy tömb lesz: std::vector<int32_t> in[];

"a nullptr jó ötlet" : és találtál vele valami hibát? vagy még mindig nem tudjuk, hol a gond?

2020. okt. 12. 13:02
Hasznos számodra ez a válasz?

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!