EACCESSVIOLATION
-
Hallo,
habe ein Problem.
Ich hab eine Listbox, aus der die Zeilen ausgelesen werden sollen, um diese dann Ziffernweise in einem Array zu speichern.
Hier mal der Code: (in der mit $ markierten Zeile tritt der Fehler auf, allerdings nur wenn ich bei "line[]" eine dynamische Variable einstelle, bei einer konstanten Variable oder einem voreingestellten Wert passiert nix...)
for (int row=0; row<30; row++) { line = mmarr->Items->Strings[row]; for (int column=0; column<50; column++) { kbarr[column][row] = String(line[column]).ToInt(); } lbkb->Items->Add(line); line = ""; }
Einer eine Idee, wie ich Problem umgehen kann?
-
Schon mal den Debugger benutzt?
-
Das Problem hierbei ist, dass ich mich mit dem Debugger nicht wirklich auskenne, auch der Link hat mir nicht weitergeholfen.
Außerdem stoppt das Programm nicht wenn ich einen Breakpoint setze und ich hab auch nicht die Möglichkeit die Anweisungsroutine einzeln zu durchlaufen, weil der entsprechen Button bzw. Eintrag disabled ist.Fehler tritt in Z. 6 auf, hab das $ vergessen. Bei kommentieren des Befehls, läuft das Programm ohne Probleme.
-
dropthelie schrieb:
Außerdem stoppt das Programm nicht wenn ich einen Breakpoint setze und ich hab auch nicht die Möglichkeit die Anweisungsroutine einzeln zu durchlaufen, weil der entsprechen Button bzw. Eintrag disabled ist.
Führst du es auch im Debug-Modus aus?
-
Nexus schrieb:
dropthelie schrieb:
Außerdem stoppt das Programm nicht wenn ich einen Breakpoint setze und ich hab auch nicht die Möglichkeit die Anweisungsroutine einzeln zu durchlaufen, weil der entsprechen Button bzw. Eintrag disabled ist.
Führst du es auch im Debug-Modus aus?
Nicht nur das, sondern den richtigen Knopf muss man auch noch drücken.
Also sicher nicht der, wo draufsteht: "Debuggen starten, ohne Debuggen".
-
drakon schrieb:
"Debuggen starten, ohne Debuggen".
Widerspricht sich das nicht? :p
Du meinst wohl eher "Starten ohne Debuggen"... <- Also den nicht drücken.
-
Nexus schrieb:
drakon schrieb:
"Debuggen starten, ohne Debuggen".
Widerspricht sich das nicht? :p
Du meinst wohl eher "Starten ohne Debuggen"... <- Also den nicht drücken.
Strg+F5 in MSVC++ ist: "Debuggen.StartenohneDebugging".
Hatte den Wortlaut nicht mehr ganz im Kopf, aber ich wusste, dass es das so in etwa gibt.
(Obwohl ja eigl. nur das Interpunktionszeichen am falschen Ort war.. )
-
Okay, wenn du das Menü auch mit einbeziehst. Da hatten die von Microsoft aber keine grosse Wahl, denn es wäre wohl nicht sehr sinnvoll gewesen, neben dem "Debuggen"-Menüpunkt einen zu machen mit der Aufschrift "Nicht debuggen" und einem einzigen Eintrag.
Naja, egal...
-
dropthelie schrieb:
Das Problem hierbei ist, dass ich mich mit dem Debugger nicht wirklich auskenne
Dann lerne, damit umzugehen. Das ist unabdingbare Arbeitsgrundlage eines Programmierers.
dropthelie schrieb:
auch der Link hat mir nicht weitergeholfen.
Bedauerlich.
-
So, den Debugger hab ich zum Laufen gebracht, dann richtigen Button hätte ich wohl gedrückt, wenn es möglich gewesen wäre... aber im Debugger-Optionen war die "integrierte Fehlersuche" nicht aktiviert
Was ich da allerdings jetzt genau untersuchen soll, weiß ich zwar net genau.
Aber die Variablen stimmen schon mal (line = 50x die 0, column= 0, row= 0).Allerdings, wenn ich String(line[column]).ToInt() auswerten lasse, erhalte ich das Ergebnis: E2122 Funktionsaufruf durch unbehandelte Exception 0xc0000005 an Adresse 0x40009720 beendet.
Was das nun genau heißt, kann mir wohl einer von euch sagen?
~Offtopic:
Audacia wenn ich schon länger als 2 Tage programmieren würde, wär dein Vorwurf okay, da ich aber erst diese Woche angefangen habe, find ich dein Statement sehr unpassend. Nicht jeder kann über Jahre hinweg am PC sitzen und programmieren. Jeder hat mal klein angefangen.In meinem C++ Buch wird nix über den Debugger geschrieben.
Aber ich denke, dass ich jetzt die grundlegenden Funktionen des Debuggers ausführen kann (dank des Links), wobei mein Problem nicht darin bestand den Debugger zu nutzen, sondern ihn zu aktivieren, was in deinem Link nicht beschrieben wird. Aber egal, mein größeres Problem ist zunächst die Auswertung.~Also wäre es nett von euch mir mal zu erklären was genau bei der Auswertung etc zu machen ist, bzw. worauf zu achten ist?
-
dropthelie schrieb:
Allerdings, wenn ich String(line[column]).ToInt() auswerten lasse, erhalte ich das Ergebnis: E2122 Funktionsaufruf durch unbehandelte Exception 0xc0000005 an Adresse 0x40009720 beendet.
Was das nun genau heißt, kann mir wohl einer von euch sagen?
Ich würde jetzt einfach mal tippen, du außerhalb des zulässigen Indexes zugreifst.
Ich bin jetzt zu Faul zum raten, aver ich tippe, das auch neben der Abfrage der Strings (C++ Builder/VCL ?) noch eine Eigenschaft gibt um dessen Anzahl zu bestimmen...
-
Soo okay, hab den Fehler gefunden... bin davon ausgegangen das ein String bei 0 anfängt, ähnlich einem Array. Tuts ja eben nicht
@asc: Ja, genau das wars
-
dropthelie schrieb:
Audacia wenn ich schon länger als 2 Tage programmieren würde, wär dein Vorwurf okay, da ich aber erst diese Woche angefangen habe, find ich dein Statement sehr unpassend. Nicht jeder kann über Jahre hinweg am PC sitzen und programmieren. Jeder hat mal klein angefangen.
Klein anzufangen ist völlig okay. Anhand deines Codebeispieles wäre ich allerdings nicht darauf gekommen, daß du erst ein paar Tage programmierst - daher verzeih
Mit "bedauerlich" blieb ich lediglich so unkonkret, wie ich auch deine Fehlerbeschreibung - "hat mir nicht weitergeholfen" - empfand.dropthelie schrieb:
Also wäre es nett von euch mir mal zu erklären was genau bei der Auswertung etc zu machen ist, bzw. worauf zu achten ist?
Wenn eine AV auftritt, hält der Debugger in der entsprechenden Zeile an. Du kannst dort dann einen Breakpoint setzen (ggf., wie im genannten Link beschrieben, als Haltepunktbedingungen den fraglichen Wert der Indexvariable einer Schleife o.ä. angeben) und bei einem erneuten Durchlauf kurz vor dem Auftreten der Zugriffsverletzung überprüfen, ob alle Zeiger auf gültige Objekte zeigen, ob der Index größer ist, als er sein dürfte, und desgleichen mehr.
Falls du nicht in eigenem Code, sondern in dstring.h, vector oder einem anderen Systemheader landest, kannst du mithilfe des Call-Stacks den Aufruf bis in deinen eigenen Code zurückverfolgen.
Die Nützlichkeit von Strg+F7 "Auswerten/Ändern" scheinst du selbst schon entdeckt zu haben
-
Okay... dann hab ich dich falsch verstanden, hat sich so angehört/gelesen, wie: "Wenn schon zu blöd bist das zu verstehen, kann ich nicht helfen."
Evtl. grad noch ne kleine Frage, die es nicht unbedingt Wert ist ein neues Thema zu eröffnen und ich nirgenwo was gefunden habe.
Kann ich DirectX SDK auch mit dem Borland C++Builder 6 nutzen oder geht das nur mit Visual C++?
Wäre nämlich doof, wenn ich jetzt mit dem Borland B. weitermache und dann hinterher umsteigen müsste. Denn ich hab mir den MSVC mal angeschaut und komme mit dem bisher nicht so zurecht, sieht alles ein bissl komisch aus und bekomme es nicht mal hin ne normale ShowMessage ausgeben zu lassen.
-
dropthelie schrieb:
Kann ich DirectX SDK auch mit dem Borland C++Builder 6 nutzen oder geht das nur mit Visual C++?
Ob das mit dem C++Builder 6 auch noch geht, weiß ich nicht, aber es gibt DirectX-Bibliotheken für C++Builder und Delphi.
dropthelie schrieb:
und bekomme es nicht mal hin ne normale ShowMessage ausgeben zu lassen.
Kein Wunder, ist die Funktion doch Teil der Delphi-RTL