unerklärliches Problem
-
ChristophLu schrieb:
ich hab den Fehler gesucht, nur sagt mit der Debugger auch nix vernünftiges:
Program recieved signal SIGSEGV, Segmentation Fault
Call Stack:67A30C61 uvszprintf()
00000000 ??()Debugger bedienen können gehört zum Programmieren dazu. Ein Debugger ist kein automatischer Fehlerfinder, der mit dem virtuellen Finger auf die Stelle zeigt, die falsch ist.
Dein Debugger hat doch sicher eine Funktion, um zeilen/blockweise durch den Code zu steppen? Lauf damit durch den Code und schau dir in jedem Schritt an, was passiert. So findet man Fehler.
-
Ganz nützlich ist es auch Teile zu kommentieren und wenn der Fehler immer noch da ist, dann weiter machen, bis er weg ist und dann hast du die Stelle schon fast, wo es Probleme gibt.
-
TGGC: Ist der Link für mich? Wenn ja: Willst du mich verarschen? Was soll das?
Ich hab jetzt den Fehler gefunden und der Code funktioniert einwandfrei. Ich habe viel früher falsche Berechnungen durchgeführt und habe somit falsche Indexe bei groupNumbers verwendet.
-
Du meinst die Zeile
groupNumbers[( matrix[i].group - 1 )]++;?
Ist auch sehr gefährlich, da du keinen Check auf die Indizes macht, benutze daher besser die Funktion 'at' statt [], dann kriegst du wenigstens eine Exception.
Und bei der Funktion getMatrixColor solltest du auch als Parameter eine konstante Referenz verwenden (ansonsten kopierst du jedesmal den gesamten vector):
getMatrixColor( const std::vector< WeichzeichnenRGB > &matrix )
-
Th69:
Die Indexes sind an der Stelle richtig, da ich sie vorher schon kontrolliere, sie ändern sich in der Zwischenzeit nicht.
Das mit dem const ist richtig, hab ich vergessen. Danke!TGGC:
Und deswegen schickst du ein Google-Link für das auskommentieren für Code. Hälst du mich eigentlich für total bescheuert?
-
ChristophLu schrieb:
TGGC:
Und deswegen schickst du ein Google-Link für das auskommentieren für Code. Hälst du mich eigentlich für total bescheuert?Lass dich von dem nicht ärgern, der schickt seine Linksammlung bei jedem einzelnen Post mit, ganz egal obs die Leute interessiert oder nicht. Kümmer dich eifnach nciht drum. Back to topic.

-
Hallo nochmal,
was mich noch ein bisschen stört ... ich habe groupNumbers im beispiel mit 5 Feldern initialisiert ... nach einer ausgabe der indexe waren da unterschiedliche werte von -10 bis +10.
Da sollte das Programm ja schon abstürtzen. Aber ich habe ja noch die MessageBom am Ende der Funktion gesehen. Wie ist das möglich?
-
Genau deswegen habe ich ja auf std::vector.at() hingewiesen!!!
Du schreibst dann einfach in irgendwelchen Speicher, der nicht zum vector gehört, und ob bzw. wann dann dein Programm abstürzt ist völlig undefiniert.
-
das hab ich doch gar nicht gefragt ... lies bitte richtig. In der jetzigen Version des Programmes sind die Indexe auf keinen Fall falsch ... In dem Programm vorher( der code, den ich gepostet habe ), habe ich auf Indexe von -10 bis +10 zugegriffen, obwohl nur von 0 bis 4 gültig wären. Aber dennoch ist das Programm nicht abgestürtzt( Ich habe ja noch die MessageBox danach gesehen ). Warum? Ich hatte den Speicher vorher deutlich überschritten?
Das ist die Frage.
-
ChristophLu schrieb:
Warum? Ich hatte den Speicher vorher deutlich überschritten?
Und genau darauf hat Th69 die richtige Antwort geschrieben. Der Zugriff mit falschen Indizes ist undefiniert, was nicht gleichbedeutend ist mit "das Programm stürzt ab". Undefiniert heißt eben dass alles passieren kann. Wennd er Compiler Spaß dran hat spielt dein Rechner je nach falschem Index eine beliebige Nationalhymne auf dem PC-Speaker, so er denn einen hat.
-
achso. Ich hatte gedacht, das das Programm bei sowas abstürtzt. Zumindest war das bis jetzt immer der Fall.
Aber wenn das so ist, ziehe ich alles zurück.