Springen naar inhoud

StackOverflowError


  • Log in om te kunnen reageren

#1

IgorCodaHollic

    IgorCodaHollic


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 17 augustus 2014 - 17:44

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

 

Bijgevoegde Bestanden


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Flisk

    Flisk


  • >1k berichten
  • 1270 berichten
  • Moderator

Geplaatst op 17 augustus 2014 - 19:35

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?

Je leest maar niet verder want je, je voelt het begin van wanhoop.

#3

IgorCodaHollic

    IgorCodaHollic


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 17 augustus 2014 - 20:42

Hi,

 

Dit is de constructor van FietsverhuurFrame:

 

public FietsverhuurFrame() {

super();

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.


#4

Flisk

    Flisk


  • >1k berichten
  • 1270 berichten
  • Moderator

Geplaatst op 17 augustus 2014 - 21:12

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

Veranderd door Flisk, 17 augustus 2014 - 21:14

Je leest maar niet verder want je, je voelt het begin van wanhoop.

#5

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 18 augustus 2014 - 10:28

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.


#6

Merlion

    Merlion


  • >25 berichten
  • 57 berichten
  • Ervaren gebruiker

Geplaatst op 18 augustus 2014 - 17:06

Ik zie hier verschillende dingen

 

 

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. 

 

 


#7

IgorCodaHollic

    IgorCodaHollic


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 21 augustus 2014 - 17:29

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


#8

Merlion

    Merlion


  • >25 berichten
  • 57 berichten
  • Ervaren gebruiker

Geplaatst op 22 augustus 2014 - 02:37

Ik zie net (met enige schaamte) dat dit Java ipv C++ is. Opmerking 2 in mijn vorige post is dus niet van toepassing. 






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures