2016-04-15 14 views
-3

Das ist mein Code (C++).Warum stürzt das ab? Wie repariere ich es?

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <sstream> 
using namespace std; 

void rotaryxorencrypt(int dat[],int len){ 
------------------------------ 
} 
void encrypt(int dat[],int len){ 
    rotaryxorencrypt(dat,len); 
} 

void decrypt(int dat[],int len){ 
} 

int main() { 
    fstream file; 
    fstream *fileptr=&file; 
    file.open("tmp",ios::in); 
    string line; 
    string *lineptr=&line; 
    int x; 
    int *xptr=&x; 
    int cont=0; 
    int *contptr=&cont; 
    int len; 
    int *lenptr=&len; 
    stringstream ss; 
    stringstream *ssptr=&ss; 
    string cryption; 
    string *cryptionptr=&cryption; 
    getline(*fileptr,*lineptr); 
    try{ 
     if(*lineptr=="encryption"){ 
      *cryptionptr="encrypt"; 
     }else if(*lineptr=="decrypt"){ 
      *cryptionptr="decryption"; 
     } else { 
      cout<<"Unknown Cryptography Type - "<<*lineptr<<endl; 
      throw 0; 
     } 
     getline(*fileptr,*lineptr); 
     *ssptr<<*lineptr; 
     *ssptr>>*xptr; 
     ss.str(""); 
     ss.clear(); 
     *lenptr=*xptr; 
     int *dataptr; 
     dataptr=new int[*lenptr]; 
     cout<<"Loading Formatted Data"<<endl; 
     while (getline (*fileptr, *lineptr)) { 
      *ssptr<<*lineptr; 
      *ssptr>>*xptr; 
      ss.str(""); 
      ss.clear(); 
      dataptr[cont]=*xptr; 
      cont++; 
     } 
     file.close(); 
      delete lineptr; 
     delete xptr; 
     delete contptr; 
     delete ssptr; 
     delete fileptr; 
     ------------------ 
     if(*cryptionptr=="encrypt"){ 
      cout<<"Beginning Encryption Process."<<endl; 
      cout<<dataptr[0]<<endl; 
      encrypt(dataptr,len); 
      cout<<dataptr[0]<<endl; 
      cout<<"Outputting Encrypted Data."<<endl; 
     }else if(*cryptionptr=="decrypt"){ 
      cout<<"Beginning Decryption Process."<<endl; 
      decrypt(dataptr,len); 
      cout<<"Outputting Decrypted Data."<<endl; 
     } 
     cout<<"Clearing Cache."<<endl; 
     delete []dataptr; 
     delete cryptionptr; 
     delete lenptr; 
    }catch(int x){ 
     if(x==0){ 
      cout<<"Clearing Cache."<<endl; 
      delete fileptr; 
      delete lineptr; 
      delete xptr; 
      delete contptr; 
      delete ssptr; 
      delete fileptr; 
     }else{ 
      cout<<"Unknown Error - Cannot Clear The Cache."<<endl; 
     } 
    } 
    cout<<"here"<<endl; 
    return 0; 
    cout<<"here"<<endl; 
} 

Notiere die cout<<"here"<<endl; vor und nach dem return 0;. Ohne sie habe ich das gleiche Problem, also sind sie nicht das Problem, aber es wird die erste cout<<"here"<<endl; ausführen, wird aber vor der zweiten abstürzen. Wenn ich die zweite entferne, tut es das gleiche, und wenn ich die erste entferne, stürzt sie einfach ab, deshalb stürzt sie auf return 0; ab. WARUM PASSIERT DIES. (PS Dies ist Teil eines anderen Projekts in der Verschlüsselung (möglicherweise wurden empfindliche Teile [keine Crashpoints oder Codefehler] in "-----------------" umgewandelt (dies ist nicht das tatsächliche Code).

+3

Bitte machen Sie eine [mcve]. Es hilft nicht, Code wegzulassen, wenn Sie sonst 100 Zeilen ausgegeben haben. Was ist Ihre genaue Ausgabe? – Tas

+0

Was Sie beschreiben, klingt nicht wie Absturz überrascht, dass ** Rückkehr ** von Ihrer Hauptroutine beendet Ihr Programm? –

+0

Mein exakter outp ut ist (\ n bedeutet, dass es eine Eingabe gibt, die ich nicht eingeben kann): Laden formatierter Daten \ nAnfang des Verschlüsselungsverfahrens. \ n140 \ n140 \ nEingabe verschlüsselter Daten. \ nCache des Cache. \ nHier \ n (hier stürzt er ab aber der Rest wird gedruckt, nachdem Fenster (7) 'Programm schließen' im Debug-Modus angegeben wurde. \ nProzess zurückgegeben 255 (0xFF) Ausführungszeit: 13.743 s \ nDrücken Sie eine beliebige Taste, um fortzufahren. (Ausgabe beenden). Um Ihnen den Rest des Codes zu geben, hat jeder Code, den ich weggelassen habe, vor dem Absturz funktioniert, also ist es nicht das Problem und es ist auch empfindlich (das ist Teil eines Verschlüsselungsprogramms) – Justin

Antwort

3

Lassen Sie sich alle Zeiger befreien und alle delete s. hier wurde nichts mit new so erstellt es nichts. okay, zu löschen, gibt es dataptr, die gelöscht werden sollen. Aber das ist furchtbar schwer in allen dereferenzierenden zu finden Noise

+0

Während ich nicht alle Zeiger löschen möchte, weil ich benutze Zeiger ist schneller und einer der Schlüsselprinzipien ist, dass die Geschwindigkeit der Schlüssel ist, entfernen alle Dereferenzierung außer für die "dataptr" gearbeitet Vielen Dank. – Justin

+0

Eine Entschuldigung ist in Ordnung, ich bin erfahren mit Python und Batch, aber das ist mein zweiter Tag mit etwas härter als diese. – Justin

+2

@Justin 'mit Zeigern ist schneller' Huh? Wer hat dir das gesagt? – Drop

Verwandte Themen