Probleme mit dem Stack



  • Ich erhalte bei Win7 in der Konsole diesen Fehler.

    Problemsignatur:
      Problemereignisname:	BEX
      Anwendungsname:	adfgvx.exe
      Anwendungsversion:	0.0.0.0
      Anwendungszeitstempel:	4b82a62c
      Fehlermodulname:	adfgvx.exe
      Fehlermodulversion:	0.0.0.0
      Fehlermodulzeitstempel:	4b82a62c
      Ausnahmeoffset:	00001338
      Ausnahmecode:	c0000409
      Ausnahmedaten:	00000000
      Betriebsystemversion:	6.1.7600.2.0.0.256.1
      Gebietsschema-ID:	1031
      Zusatzinformation 1:	6154
      Zusatzinformation 2:	6154771b0044c28a0aa2fa1df9bc836a
      Zusatzinformation 3:	d9a5
      Zusatzinformation 4:	d9a52dd1b09ee990779e20ed66070961
    
    Lesen Sie unsere Datenschutzbestimmungen online:
      http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0407
    
    Wenn die Onlinedatenschutzbestimmungen nicht verfügbar sind, lesen Sie unsere Datenschutzbestimmungen offline:
      C:\Windows\system32\de-DE\erofflps.txt
    

    Das Programm ist adfgvx.exe.
    Ich verwende zum programmieren VS2008 und habe meine Fehlersuche mittlerweile so weit eingegrenzt, dass der Fehler bei diesem Quelltext durch die Variable polybios entsteht (Debugging bei VS) weiß aber nicht Probleme mit dem Stack auftreten sollten (was VS als Fehler ausgibt).

    #include <stdio.h>
    #include <stdlib.h>
    
    const int MAXLENGTH = 10000;
    const int PASSWORDLENGTH = 20;
    
    const char letters[]= "ADFGVX";
    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
    int letter(char c){
    	if(c=='A'||c=='B'||...){return 1;}
    	if(c=='a'||c=='b'...){return -1;}
    	return 0;
    }
    void  lettercypher (char password[PASSWORDLENGTH], char (&returncypher)[36][2]){
         char polybios[6][6]={' '};
         int i=0;
         while(letter(password[i])&&i<PASSWORDLENGTH){
             int in = 0;
             for(int k=0;k<6;k++){
                for(int l=0;l<6;l++){
                   if(polybios[k][l]==password[i]){in=1;}
                }
             }
    		 int k=i/6;
             if(!in){polybios[k][i%6]=password[i];}
             i++;
         }
         for(int k=0;k<36;k++){
             int in=0;
             for(int l=0;l<6;l++){
                 for(int m=0;m<6;m++){
                     if(polybios[l][m]==alphabet[k]){in=1;}
                 }
             }
    		 int k=i/6;
             if(!in){polybios[k][i%6]=alphabet[k];}
             i++;
         }//should work!!!
         for(int k=0;k<6;k++){
             for(int l=0;l<6;l++){
                  for(int m=0;m<36;m++){
                      if(alphabet[m]==polybios[k][l]){returncypher[m][0]=letters[k];returncypher[m][1]=letters[l];break;}
                  }
             }
         }
    }
    

    Übrigens habe ich den selben Quelltext auch bei einem Programm für Dev-CPP verwendet und da hat es funktioniert.

    Woran könnte das liegen?

    Vielen Dank für die Hilfe schon im Voraus!

    Grüße Ben



  • z.36,37 da geht doch k durch die decke oder?



  • Der Fehler ist behoben...neuer Quelltext ist

    void  lettercypher (char password[PASSWORDLENGTH], char (&returncypher)[36][2]){
         char polybios[6][6]={' '};
         int i=0;
         while(letter(password[i])&&i<PASSWORDLENGTH){
             int in = 0;
             for(int k=0;k<6;k++){
                for(int l=0;l<6;l++){
                   if(polybios[k][l]==password[i]){in=1;}
                }
             }
             if(!in){polybios[i/6][i%6]=password[i];}
             i++;
         }
         for(int k=0;k<36;k++){
             int in=0;
             for(int l=0;l<6;l++){
                 for(int m=0;m<6;m++){
                     if(polybios[l][m]==alphabet[k]){in=1;}
                 }
             }
             if(!in){polybios[i/6][i%6]=alphabet[k];}
             i++;
         }//should work!!!
         for(int k=0;k<6;k++){
             for(int l=0;l<6;l++){
                  for(int m=0;m<36;m++){
                      if(alphabet[m]==polybios[k][l]){returncypher[m][0]=letters[k];returncypher[m][1]=letters[l];break;}
                  }
             }
         }
    }
    


  • Achso...der Fehler beim ausführen kommt trotzdem noch!

    Entschuldigt den Doppelpost...



  • das ist doch das gleiche? das i bringt das problem, erstens weißt nicht mit welcher zahl das in deinen 2. großen for block kommt, und dann wird i auch noch 36 mal erhöht...

    also versuch mal zwischen z.13 und 14 i=0; oder so, oder beschreib mal was du da machen willst am besten mit worten, denn das sieht nicht so dolle aus

    noobLolo



  • Im groben ist das Ziel bestimmte Werte (nach dem Prinzip des ADFGVX-Chiffre) in ein 6x6-Feld einzutragen. Deshalb ist es richtig, dass i von 0 bis 35 steigt... Die Referenzierung polybios[i/6][i%6] sollte (wenn ich mir das richtig überlegt habe als Spalte für Spalte die Werte in das Array polybios[6][6] eintragen.



  • i geht aber nur bis 35 wenn "(letter(password[i])&&i<PASSWORDLENGTH)==FALSE" sonst > 35 und du hast dein fehler oder?

    ADFGVX

    evtl. solltest mal bischen was moderneres verwenden 😃



  • Naja,
    ist zwar auch ein Fehler, aber nicht der entscheidende. Ich bekomme immer noch die gleiche Fehlermeldung, wenn ich nach der while-Schleife noch ein i++; einfüge.

    Und ja, ADFGVX ist ein bisschen veraltet, aber ist halt Schule... 😃



  • Um das Ganze jetzt mal abzuschließen - ich habe den Fehler gestern gefunden, es lag wirklich an der schelcht programmierten Zählweise... (Nur zu Info)


Anmelden zum Antworten