Seite 1 von 1

[gelöst] Q3PointArray [i] vs value(i) ein komisches Problem

Verfasst: 8. Dezember 2006 21:48
von robes
Da bin ich wieder mit nem neuen Problem.
Ich benutze ein Q3PointArray und hatte für die Zugriffe eigentlich den [] Operator benutzt. Bei lese- und schreiboperationen ins Array hatte ich keine Probleme, nur dann, wenn ich das Array per return ausgegeben habe und der nächsten Methode als Parameter übergeben habe, habe ich auf der Stelle (bevor irgendwas in der zweiten Methode gemacht wurde) eine "Heap block past requested size" Exception rausgeworfen bekommen. Das geschah jedoch beim jeden Zugriff sondern erst nach ein paar Iterationen.
Voller verzweiflung habe ich alle [] operatoren durch value() ersetzt. Und siehe da - es läuft ohne Probleme. Kurz in die Referenz nachgeschaut:

T QVector::value ( int i ) const
Returns the value at index position i in the vector.
If the index i is out of bounds, the function returns a default-constructed value. If you are certain that i is within bounds, you can use at() instead, which is slightly faster.



T & QVector::operator[] ( int i )
Returns the item at index position i as a modifiable reference.
i must be a valid index position in the vector (i.e., 0 <= i < size()).


Es sind keine Eigenschaften dabei, die auf so ein verhalten schliessen könnten - ich könnte es verstehen, wenn ich gleich beim Zugriff ne "index out of bound exception" rausgeworfen bekommen hätte, aber es geschah absolut NICHTS. Erst bei der Übergabe streikte er...

Hat jemand ne Vermutung was das sein könnte? Ich befürchte, dass das Programm jetzt inkorrekte berechnungen durchführen könnte (obwohl es läuft)...

Verfasst: 8. Dezember 2006 22:02
von Christian81
Schonmal dran gedacht dass
T und T& zwei verschiedene Dinge sind?
Wenn Du eine Referenz zurückbekommst und damit auch weiterarbeitest (ohne ein implizites copy zu machen), könnte es sein dass Dein Array z.B. nicht mehr da ist wo es war. Eni Codebeispiel wäre von Vorteil um zu sehen ob das ggf. der Fall ist.

Verfasst: 8. Dezember 2006 22:14
von upsala
Mal davon abgesehen, schon mal darüber nachgedacht Q3PointArray durch QPolygon zu ersetzen?

Verfasst: 8. Dezember 2006 22:16
von robes
:oops: :lol: :lol: :lol:

Habe das "&" hab ich übersehen. OMG, das würde einiges erklären - hab mit den Addressen rumgerechnet.... ne ne ne... ein bisshen mehr Schlaff währ nicht verkehrt glaube ich...

Danke ;)
upsala hat geschrieben:Mal davon abgesehen, schon mal darüber nachgedacht Q3PointArray durch QPolygon zu ersetzen?
yep, das kommt aber in der nächsten Iteration - erstmal muss alles auf den Supports wieder laufen..