1 van 1
StackOverflowError
Geplaatst: zo 17 aug 2014, 18:44
door IgorCodaHollic
Hallo,
Ik ben bezig een verhuurprogramma te schrijven, echter krijg ik een StackOverflowError.
Ik begrijp dat dit moet duiden op een tekort aan geheugen, waarschijnlijk veroorzaakt door een oneindige lus of iets dergelijks.
Ik heb de code keer op keer nagelopen, maar niets kunnen ontdekken, heb ook nergens een herhaling of zo gebruikt.
Weet iemand waar in de code de fout zou kunnen zitten?? Het zou in een van de methoden moeten zijn.
De foutmelding wordt aangegeven voor de regel "FietsverhuurFrame uren = new FietsverhuurFrame()" en ook voor dezelfde regel in de GUI-klasse waar een nieuw object gemaakt wordt van de VerhuurBeheer-klasse.
Het zit m dus volgens mij in de associatie tussen de twee klassen alleen weet ik niet waar.
Is er iemand die de helpende hand kan bieden??
Alvast heel erg bedankt voor de hulp!!!
Re: StackOverflowError
Geplaatst: zo 17 aug 2014, 20:35
door Flisk
Kan je eens de constructor van FietsverhuurFrame geven?
Je zegt ook dat er een nieuw object van de VerhuurBeheer klasse wordt aangemaakt in FietsverhuurFrame. Dit terwijl er een nieuw object van FietverhuurFrame wordt aangemaakt in VerhuurBeheer. Zou dit niet voor de oneindige loop zorgen?
Re: StackOverflowError
Geplaatst: zo 17 aug 2014, 21:42
door IgorCodaHollic
Hi,
Dit is de constructor van FietsverhuurFrame:
<b>public</b> FietsverhuurFrame() {
<b>super</b>();
initialize();
mijnInit();
}
Bij de foutmeldingen wordt er ook melding gemaakt van de exception op de plek waar de superklasse aangeroepen wordt.
De reden dat ik in beide klassen nieuwe objecten van ieder gemaakt heb is om de verschillende objecten/methoden aan te kunnen roepen, dus in VerhuurBeheer t aanroepen van de GUI-klasse en in de GUI-klasse t aanroepen van VerhuurBeheer.
Zou het hierin zitten, dan moet ik de methoden in VerhuurBeheer op zichzelf laten werken, zonder de GUI-klasse erin te laten betrekken.
Re: StackOverflowError
Geplaatst: zo 17 aug 2014, 22:12
door Flisk
IgorCodaHollic schreef:
De reden dat ik in beide klassen nieuwe objecten van ieder gemaakt heb is om de verschillende objecten/methoden aan te kunnen roepen.
Is de enige reden het oproepen van methodes van die klasse(n)? Zo ja, dan zou ik de nodige methodes statisch maken, dus na public gewoon static plaatsen. Dan hoef je helemaal geen object te maken, wat dus veel handiger is. Je kan dan de gewenste methode zo gebruiken:
KlasseNaam.methodeNaam();
Het zou dus kunnen dat je een stackoverflow krijgt omdat je een object FietverhuurFrame aanmaakt dat een object VerhuurBeheer aanmaakt dat een object FietverhuurFrame aanmaakt, dat een object VerhuurBeheer aanmaakt...enz.
Ik ben niet 100% zeker, dus schiet me niet af als ik ernaast zit
.
Re: StackOverflowError
Geplaatst: ma 18 aug 2014, 11:28
door Xenion
Wat misschien ook kan helpen is om in de constructors output naar de console ofzo te schrijven. Als ze elkaar inderdaad oneindig aan het aanroepen zijn, dan zou je dat zo kunnen zien.
Re: StackOverflowError
Geplaatst: ma 18 aug 2014, 18:06
door Merlion
Ik zie hier verschillende dingen
IgorCodaHollic schreef:
Bij de foutmeldingen wordt er ook melding gemaakt van de exception op de plek waar de superklasse aangeroepen wordt.
De reden dat ik in beide klassen nieuwe objecten van ieder gemaakt heb is om de verschillende objecten/methoden aan te kunnen roepen, dus in VerhuurBeheer t aanroepen van de GUI-klasse en in de GUI-klasse t aanroepen van VerhuurBeheer.
1) Dit lijkt mij recursief wat zonder stopvoorwaarde fataal is. Je kan dit eenvoudig testen door debuginformatie naar een console te printen.
2) Een new zonder bijbehorende delete is een memory leak, wat fataal kan zijn in lussen.
3) Waarom zijn deze member-variabelen static? Dit lijkt mij erg onwaarschijnlijk in deze toepassing.
Re: StackOverflowError
Geplaatst: do 21 aug 2014, 18:29
door IgorCodaHollic
Klopt inderdaad.
De stackoverflow ontstond doordat er in beide klassen nieuwe objecten van elkaar gemaakt werden. Resulteerde in de oneindige lus.
Weer wat geleerd dus.
In ieder geval bedankt voor de diverse oplossingen!!
Re: StackOverflowError
Geplaatst: vr 22 aug 2014, 03:37
door Merlion
Ik zie net (met enige schaamte) dat dit Java ipv C++ is. Opmerking 2 in mijn vorige post is dus niet van toepassing.