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)