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 Code

    kann mir da einer Weiterhelfen?


  • Mod

    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 😃


  • Mod

    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 😉


Anmelden zum Antworten