[C++] vaag gedrag bij ophogen variabele in loop

Pagina: 1
Acties:

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 10:25
Ik heb een openGL programmaatje met een idleLoopje erin om een waarde te verhogen. Het vreemde is dat er in dit loopje slechts 2 dingen staan:
code:
1
2
    hoek += 0.05;
    glutPostRedisplay();

waarbij hoek een globaal gedefinieerde float is. Wanneer die eerste regel er staat wordt een hele andere variable in m'n programmacode (die helemaal niets met deze vandoen heeft) opgehoogd. Wanneer ik de regel weglaat draait alles zoals het zou moeten, zet ik de regel erin flipt de boel omdat die andere variabele ineens ongeldige waarden begint aan te nemen. Snap niet hoe dat kan!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
iCe01 schreef op vrijdag 04 maart 2005 @ 22:47:
Wanneer die eerste regel er staat wordt een hele andere variable in m'n programmacode (die helemaal niets met deze vandoen heeft) opgehoogd. Wanneer ik de regel weglaat draait alles zoals het zou moeten, zet ik de regel erin flipt de boel omdat die andere variabele ineens ongeldige waarden begint aan te nemen. Snap niet hoe dat kan!
Worden zowel die andere variabele als "hoek" opgehoogd, of alleen die andere variabele?

Als het alleen om die andere variabele gaat, misschien maak je meerdere keren gebruik van dezelfde variabele "hoek" ? Probeer anders eens om de (relevante) variabele hoek van naam te veranderen (hoek_bla ofzo).

Anders kan het ook een knock-on effect zijn, dat de stack corrupt raakt door een operatie elders in het programma, maar dat wanneer je de "hoek +=" regel toevoegt, dat die de klap opvangt ipv een ander gedeelte van het programma (waarin je het niet merkt).

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 10:25
Naam vervangen heb ik al geprobeerd, dat werkte niet; die variabele wordt elders alleen maar uitgelezen, verder gebeurd er helemaal niks mee.
De variabele die opgehoogd wordt zit raar genoeg in een array, en elke keer op plaats 4 gebeurd die vreemde verhoging, lijkt er dus op dat het een ongewenst foutje van elders is inderdaad. Heb inmiddels de code wat aangepast zodat het wel werkt, maar zou toch graag willen weten waar het nu door komt :)

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Probeer dmv breakpoints eens te lokaliseren wanneer de verandering plaatsvind. Dan kom je er snel genoeg achter waardoor die verandering wordt veroorzaakt (vermoed ik).

  • MisterData
  • Registratie: September 2001
  • Laatst online: 10-05 19:07
En je hebt niet toevallig meerdere threads die tegelijkertijd de hoek-variabele gebruiken oid?

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 10:25
Breakpoints geven diezelfde verhoging aan, dus daar heb ik weinig aan.

Heb geen meerdere threads lopen nee. Lijkt erop dat er een geheugenadres voor 2 verschillende variabelen gebruikt wordt. Heb nu relevante zaken in een aparte klasse gestopt en dan werkt het wel; code is verder hetzelfde gebleven. Rare zaakjes :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het klinkt alsof er iets is dat buiten z'n buffer schrijft. Doe je in die functie of in één van de functies die je aanroept vanuit die functie iets met locale arrays? Of gebruik je ergens een ongeinitialiseerde pointer?

Overigens heeft dit dus geen zak te maken met OpenGL, ik gok maar even dat het C++ is, anders moet je het even zeggen :)

[ Voor 11% gewijzigd door .oisyn op 06-03-2005 13:08 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 10-05 10:05
iCe01 schreef op zaterdag 05 maart 2005 @ 16:37:
Breakpoints geven diezelfde verhoging aan, dus daar heb ik weinig aan.
Heb nu relevante zaken in een aparte klasse gestopt en dan werkt het wel; code is verder hetzelfde gebleven. Rare zaakjes :)
Grote kans dat je overflow er nog inzit. Je verschijnsel is opgelost, je bug niet.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

iCe01 schreef op vrijdag 04 maart 2005 @ 23:05:
De variabele die opgehoogd wordt zit raar genoeg in een array, en elke keer op plaats 4 gebeurd die vreemde verhoging, lijkt er dus op dat het een ongewenst foutje van elders is inderdaad.
Weet je heel zeker dat je genoeg ruimte in die array hebt voor plaats (index?) 4? Hoe maak je die array precies aan? Zoals farlane al zegt kan de fout er nog steeds in zitten, dus ik zou er toch maar even naar kijken.

www.madwizard.org

Pagina: 1