Zugriffsverletzung bei Funktionsaufruf
-
Hallo zusammen,
ich schreibe für ein Schulprojekt eine Art PC-Konfigurator.
Man soll nach und nach Einzelteile auswählen können und aufgrund der Auswahl sollen die weiteren Auswahlmöglichkeiten begrenzt werden.Z.B. wenn man eine PCIExpress-GraKa auswählt sollte das Programm natürlich kein AGP-Mainboard zur Auswahl geben.
Die einzelnen Kategorien von Artikeln möchte ich in Arrays aus TXT-Dateien einlesen und habe mir dafür eine Funktion gebastelt die ich aus dem Programmfluss aufrufen möchte, um ein solches Array zu erstellen.
Mein Problem ist nun, dass wenn ich die funktion aufrufe das Programm abschmiert, mit folgender meldung:
Unbehandelte Ausnahme bei 0x012b6006 in Test.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xe198fb0b.
Hier habe ich die betreffenden Zeilen aus dem Programm:
#include <iostream> #include <fstream> #include <string> using namespace std; void erzeugeArray(string dateiname, string tempArray[4][10], int maxSpalten){ int d1 = 0;//Zähler für erste Dimenson von Array int d2 = 0;//Zähler für zweite Dimenson von Array ifstream in; in.open(dateiname.c_str()); if ( !in.is_open()) { cout << "Fehler: Datei konnte nicht geöffnet werden\n";} while(!in.eof() && d1 < 10){ while(d2 < maxSpalten && !in.eof()){ getline(in, tempArray[d1][d2]);//String Zeilenweise einlesen d2++; } d2 = 0; d1++; } in.close(); } int main(){ string grakaArray[4][10]; erzeugeArray("Grafikkarten.TXT",grakaArray,4); system("PAUSE"); return 0; }Int maxSpalten, als Parameter der Funktion erzeugeArray(), soll die Durchläufe der while-Schleife begrenzen, da die verschiedenen Kategorien von Artikeln auch verschieden viele Zeilen an Merkmalen haben die eingelesen werden müssen.
Wenn ich maxSpalten durch einen Festen Wert z.B 6 ersetze klappt es.

Ich habe den Code schon so wie er hier steht, ohne den rest des Programmes, ausgeführt und der Fehler besteht weiterhin.
Hier der gesamte Codekann mir da einer Weiterhelfen?
-
Holla. Das nenn ich mal kreative Einrückung.

Zum Fehler: Da hast du wohl d1 und d2 vertauscht.
-
Hast du mal im Debugger verfolgt, an welcher Stelle das Problem auftritt?
Ansonsten fällt bei näherer Betrachtung auf, daß du die Array-Indizes vertauscht hast.
PS: Hast du schonmal etwas von for()-Schleifen gehört?
PPS: um open()/close() wurden hier schon so einige Glaubenskriege ausgetragen

-
CStoll schrieb:
PPS: um open()/close() wurden hier schon so einige Glaubenskriege ausgetragen

Viel schwerer wiegt das falsche Prüfen auf eof vor dem Lesen. Das ist zwar nicht was zum Absturz führt (das sind die falschen Indizes), aber es wird dazu führen, dass falsch gelesen wird, falls in der Datei weniger als 40 Zeilen sind.
-
ich danke euch für eure Antworten.
SeppJ schrieb:
Holla. Das nenn ich mal kreative Einrückung.

Zum Fehler: Da hast du wohl d1 und d2 vertauscht.
Ja arbeite noch nicht lange mit IDE. Muss mich da mal mit den Automatismen auseinadersetzen :p
Und thx, die Tomaten auf den Augen haben mich wohl von den Indizes abgelenkt

CStoll schrieb:
PS: Hast du schonmal etwas von for()-Schleifen gehört?
Ja, habe ich... Und hier währe wohl der richtige Platz um sie anzuwenden

CStoll schrieb:
PPS: um open()/close() wurden hier schon so einige Glaubenskriege ausgetragen

Oh, ich hoffe ich fahr keinem an'ne Karre mit meinem Code

[quote="SeppJ"]
CStoll schrieb:
...aber es wird dazu führen, dass falsch gelesen wird, falls in der Datei weniger als 40 Zeilen sind.
Das werd ich mir unter die Lupe nehmen.
-
FlorianM schrieb:
CStoll schrieb:
PS: Hast du schonmal etwas von for()-Schleifen gehört?
Ja, habe ich... Und hier währe wohl der richtige Platz um sie anzuwenden

Ja, die beiden while()-Schleifen schreien geradezu danach

CStoll schrieb:
PPS: um open()/close() wurden hier schon so einige Glaubenskriege ausgetragen

Oh, ich hoffe ich fahr keinem an'ne Karre mit meinem Code

Ich bin da nicht so empfindlich, aber warte mal, bis Pi deinen Beitrag entdeckt

-
Schon lange vorher entdeckt und den Kopf geschüttelt, dann war mein Internet weg
