Zugriffsverletzung beim Schreiben an Position 0x5b650885



  • Hallo

    Ich noch ein blutiger C++ Anfänger und habe mich an einem
    Programm zur Verschlüsselung von Strings,welche dann mit ofstream
    in einer .txt gespeichert werden. Nun kommt aber immer ein Fehler:

    Eine Ausnahme (erste Chance) bei 0x011f5c66 in PwP.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5b650885.
    Unbehandelte Ausnahme bei 0x011f5c66 in PwP.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5b650885.

    Hier mal mein Code:

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    	int main()
    	{
    
    		    string cpu[1];
    			cout << "geben sie ihr passwort ein! 3 Buchstaben" << endl;
    			cin >> cpu[1];
    
    		// Verschlüsselung		
    			if (cpu[1] == "a")
    			{
    				cpu[1] = "b";
    
    		    }
    
    			if (cpu[1] == "b")
    			{
    				cpu[1] = "c";
    
    		    }
    
    			if (cpu[1] == "c")
    			{
    				cpu[1] = "d";
    
    		    }
    
    			if (cpu[1] == "d")
    			{
    				cpu[1] = "e";
    
    		    }
    
    			ofstream fout("PCD.txt");
    			fout << cpu[1];
    
    			system ("pause");
    			return 0;
    
    }
    


  • Array-Indices laufen in C++ von 0 bis (Größe des Arrays) - 1. Mit

    string cpu[1];
    

    ist

    cpu[1]
    

    also außerhalb des Arrays. Zugriff darauf ist undefiniert - ersetz es durch cpu[0], dann sollte es gehen.

    Gibt es einen Grund, warum du überhaupt ein Array benutzt? Mit Größe 1 scheint das nicht wirklich sinnvoll.



  • Du solltest dir nachmal ansehen, was Arrays sind und wie sie verwendet werden. Du hast dort ein ein-elementiges Array angelegt (schonmal sinnlos) und greifst dann auf das zweite Element dieses Arrays zu.



  • Hallo

    Danke erstmal für die schnelle Antwort
    zu dem kleinen Array : Ist nur ein programm zum entwickeln einer Verschlüsselung

    Jetzte kriege ich den Fehler:
    Eine Ausnahme (erste Chance) bei 0x6ef31f68 (msvcp100d.dll) in PwP.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcf6c42bc.
    Unbehandelte Ausnahme bei 0x6ef31f68 (msvcp100d.dll) in PwP.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcf6c42bc.



  • crashjosh schrieb:

    Hallo

    Danke erstmal für die schnelle Antwort
    zu dem kleinen Array : Ist nur ein programm zum entwickeln einer Verschlüsselung

    Ein ehrgeiziges Vorhaben für einen "blutigen C++ Anfänger".

    Zeig doch mal den Code, den du inzwischen zusammenbekommen hast.



  • string cpu[2];
    			cout << "geben sie ihr passwort ein! 3 Buchstaben" << endl;
    			cin >> cpu[2];
    
    		// Verschlüsselung		
    			if (cpu[0] == "a")
    			{
    				cpu[0] = "b";
    
    		    }
    
    			if (cpu[0] == "b")
    			{
    				cpu[0] = "c";
    
    		    }
    
    			if (cpu[0] == "c")
    			{
    				cpu[0] = "d";
    
    		    }
    
    			if (cpu[0] == "d")
    			{
    				cpu[0] = "e";
    
    		    }
    
    			ofstream fout("PCD.txt");
    			fout << cpu[1];
    


  • ....

    fout << cpu[2]
    

    meinte ich ^^



  • crashjosh schrieb:

    ....

    fout << cpu[2]
    

    meinte ich ^^

    Das Array-"Element" liegt immer noch außerhalb des Arrays. Lass am besten das ganze Array-Gebastel komplett weg und fang damit an, einzelne Strings zu verarbeiten.



  • Ok, werde ich machen aber ist schwierig die buchstaben usw in string zu verarbeiten ohne dass man auf sie zugreifen kann ....

    Trotzdem vielen Dank



  • Wieso denn? Strings bieten auch Index-Zugriff, so daß du auf die einzelnen Zeichen zugreifen kannst. (du mußt nur den Unterschied zwischen String und Zeichen kennen ;))

    PS: Dein Verschlüsselungsverfahren ist reichlich primitiv und nicht eindeutig 😃



  • Caeser Verschlüsselung erstmal für den Anfang 😃
    Würde ich dann aber auch verXORen ^^



  • Cäsar habe ich schon erkannt 😃 Dein Problem ist nur, daß du sie immer auf den selben Buchstaben anwendest (d.h. alle Buchstaben von 'a' bis 'd' werden verschlüsselt zu 'e'). Wenn du es richtig anwenden willst, dann brauchst du erstmal eine Schleife, um alle Buchstaben zu erfassen - und eine Kombination aus + und % (Modulo) für die Verschiebung.



  • Fehler:

    int i;
    string epu[30];
    string cpu[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    string gpu[] = {"b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a"};
    
    cin >> epu[30];
    for(i = 0 ; i < 25 ; ++i)
    {
    	if (epu[i] != cpu[i])
    	{
    	    cout << endl;
    	}
    
    	else
    	{
    		epu[i] = gpu[i];
    	}
    }
    
    cout << epu[i];
    

    Also iwie mache ich etwas falsch ^^ 😕



  • string epu[30];
    ...
    cin >> epu[30];
    

    Wenn du diese Arrays noch größer machst, wird das Programm auch nicht besser. Bevor du hier weitermachst, solltest du als erstes ein vernünftiges Buch holen und lernen, wie du mit Strings und Arrays umgehen kannst.

    (die Schleife dahinter sieht einfach nur unsinnig aus)





  • Du solltest dir eher mal ein gutes Buch für den Anfang holen, als ein gutes zur Forsetzung.



  • Gut ist das Buch nicht gut?
    Dann nenn mir ein gutes (für)den Anfang :p



  • s. FAQ: "Bücher"


Anmelden zum Antworten