Toon posts:

[Qt/GCC] vage run-time error

Pagina: 1
Acties:

Verwijderd

Topicstarter
Misschien dat een van de gurus hier me kunnen helpen want ik kom er niet uit en heb het zo goed als opgegeven.

Stel, ik heb een STL list van pointers naar QFrame als member van een class genaamd "Object". Dan is er een andere class genaamd "Schedule", die in feite een inherited QTable is.

Als in die Schedule class vervolgens een cell in haar table wordt gekoppeld aan een bestaande widget door midden van een van de pointers in die STL list, dan compilet het gebeuren weliswaar goed, maar knalt de applicatie eruit zodra de cell met de bewuste widget pointer erin zichtbaar wordt gemaakt. Er kunnen twee soorten run-time meldingen opduiken: "segmentation fault" of "illegal instruction". :(

Voor de duidelijkheid: van al die pointers in de STL list is in de class "Object" reeds een new gedaan voor geheugenreservering. Tevens geeft de iterator ook aan dat het correcte aantal pointers na het doorlopen van de code ook werkelijk in de list zit.

Dan is er nog iets bizars: als ik op afstand, vanaf de main function dus, hetzelfde doe (pointer uit de list in "Object" koppelen aan een cell in "Schedule"), dan gaat het goed! Maar ik moet deze functionaliteit ingebouwd hebben in Schedule zelf. Waarom gaat dit toch fout? Zijn er misschien typische booby traps waar ik in kan zijn gevallen? :?

Help is much appreciated.

Verwijderd

In principe ben ik eigenlijk Gtk+ programmeur, maargoed :P
Op woensdag 20 maart 2002 12:40 schreef motown het volgende:
Er kunnen twee soorten run-time meldingen opduiken: "segmentation fault" of "illegal instruction". :(
Dan moet je het geheel dus debuggen. Segmentation Fault is een geheugenfout, dus dan heb je iets fout gedaan in je geheugenallocatie (of Qt heeft dat gedaan). Illega Instruction betekent dat je een actie probeert te doen die gewoon niet mogelijk is (bv. MMX computer instructie op een 386 of dat je dus op een verkeerde manier objecten aan elkaar koppelt).

Hercompileren met gcc -g (-g zorgt voor debugging ymbols) en dan debuggen met gdb. Succes!

Verwijderd

Topicstarter
Op woensdag 20 maart 2002 13:04 schreef beelzebubu het volgende:
[..]

Dan moet je het geheel dus debuggen. Segmentation Fault is een geheugenfout, dus dan heb je iets fout gedaan in je geheugenallocatie (of Qt heeft dat gedaan). Illega Instruction betekent dat je een actie probeert te doen die gewoon niet mogelijk is (bv. MMX computer instructie op een 386 of dat je dus op een verkeerde manier objecten aan elkaar koppelt).

Hercompileren met gcc -g (-g zorgt voor debugging ymbols) en dan debuggen met gdb. Succes!
Zucht... Kennelijk dus ingewikkelder dan ik had gevreesd. :( Toch bedankt voor je inbreng. Voordat ik eventueel ga debuggen, zijn er misschien ook nog mensen die andere suggesties hebben van typische fouten die hiertoe kunnen leiden? Misschien dat iemand hier het allemaal bekend voorkomt? Er wordt toch immers gezegd: "hoe vager de meldingen, hoe stommer de fouten."? Ik moet zeggen dat zowel mijn broer als ikzelf de code een hele tijd hebben doorgespit en we hebben echt geen idee wat het probleem zou kunnen zijn. Ergens gaat het kennelijk fout als er via een "new" statement een nieuwe pointer wordt aangemaakt, waarna die pointer in de STL list wordt geplaatst. Om een of andere manier gaat het alleen maar goed als die lijst of vanaf de class Object zelf (waar die lijst een member van is) of vanaf de main functie wordt benaderd. Maar dus niet als ik binnen de schedule class (nogmaals een inherited QTable) een instantie maak van "Object", zijn lijst laat vullen met pointers naar met new aangemaakte QFrames, en vervolgens een van die pointers in de frame van de schedule widget hang. Gaat gek genoeg foutloos, totdat de cell waar die point aan is gekoppeld werkelijk wordt getoond. :?

Het is dus zo dat stel, ik heb een pointer uit die lijst gekoppeld aan bijvoorbeeld de cell op de derde rij in de derde kolom, ik visualiseer de widget waarna ik slechts een deel te zien krijg (waaronder nog niet de cell die geladen is met die pointer). Zodra ik die widget dan echter zodanig resize dat de bewuste cell zichtbaar zou moeten worden... Beng! "segmentation fault" of een "illegal instruction". |:(

Wie weet ligt het probleem wel voor de hand, maar ik zou het zelf echt niet weten.

Misschien dat de Qt-kenners onder ons die ervaring hebben met custom widgets hier wat over kunnen vertellen?

Verwijderd

Topicstarter
???

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:04
Die laatste 3 reactie van je motown zijn wel niet veel zeggend, vind je niet?

https://fgheysels.github.io/


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

(jarig!)
Heb je al gedaan wat belzebubu gedaan heeft? qt en je eigen source gecompiled met debug info en door de gdb gehaald? En het is misschien wel makkelijker om dan je stack hier neer te posten ipv smilies waar niemand iets aan heeft..

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • marcelk
  • Registratie: December 2000
  • Niet online
Post de source eens (als dat kan).

Waarom gebruik je trouwens een STL list ? In Qt/KDE programming boeken wordt aangeraden om QList te gebruiken.

Verwijderd

Topicstarter
Op maandag 03 juni 2002 11:25 schreef marcelk het volgende:
Post de source eens (als dat kan).

Waarom gebruik je trouwens een STL list ? In Qt/KDE programming boeken wordt aangeraden om QList te gebruiken.
Maar volgens Trolltech was Qt 3.x dusdanig verbeterd dat het STL compatible zou moeten zijn.

Ik heb ook al van iemand anders gehoord dat het zo nou eenmaal niet gaat werken, maar het probleem is dat ik in mijn custom widget een dynamische datastructuur wil gebruiken, omdat het aantal tiles (ingevulde cellen in de table) varieert.

De QList heb ik nog niet geprobeerd, omdat ik ervan uit was gegaan dat dat (althans in de 3.x versie) niet uit zou moeten maken.

Toch bedankt voor jullie reacties. :) Ik zie er alleen zo tegenop om te gaan debuggen.
Pagina: 1