2016-04-15 14 views
-3

これは私のコードです(C++)。これはなぜクラッシュですか?どうすれば修正できますか?

#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; 
} 

return 0;前と後cout<<"here"<<endl;に注意してください。それらがなければ私は同じ問題を抱えているので問題はありませんが、それは最初のcout<<"here"<<endl;を実行しますが、2番目前にクラッシュします。私が2番目のものを取り除くと、同じことが起こります。最初に取り除くとクラッシュするので、return 0;にクラッシュしています。なぜこうなった。 (PSこれは暗号化の別のプロジェクトの一部です(おそらく敏感な部分[クラッシュポイントやコードエラーではない]が "-----------------"に変わったかもしれません(これは実際のものではありませんコード)。

+3

[mcve]を作成してください。100行をダンプしたときにコードを省略することはできません。正確な出力は何ですか? – Tas

+0

あなたの説明はクラッシュのようには聞こえません。 **あなたのメインルーチンからの帰り**があなたのプログラムを終了させることに驚いたのですか? –

+0

私の正確なoutp (\ nは入力できない入力があることを意味します):フォーマットされたデータの読み込み\ n暗号化プロセスの開始\ n140 \ n140 \ n暗号化されたデータの入力\ nキャッシュの消去\ nこれはクラッシュする場所です\ nプロセスは255(0xFF)の実行時間を返しました:13.743 s \ n続行するにはキーを押してください。 (終了出力)。コードの残りの部分を与えるために、私が省略したコードは、クラッシュが始まる前に動作したので、問題ではなく、機密性があります(これは暗号化プログラムの一部です)。 – Justin

答えて

3

は、すべてのポインタを取り除くと、すべてdelete秒。何もここnewで作成されなかったのでわかりました。削除するためには何もありません、削除すべきdataptrがあります。しかし、それはすべての間接参照で見つけるためにひどく難しいですノイズが発生する

+0

使用しているのですべてのポインタを削除したくありませんポインタは高速であり、重要な原則の1つは速度が重要であり、 'dataptr'の作業以外のすべての参照解除を取り除いたことです。 – Justin

+0

謝罪は順序通りです、私はPythonとバッチで経験があります。しかし、これは私より2番目の日です。 – Justin

+2

@Justinはポインタを使うのが速いのですか?誰が言ったのですか? – Drop

関連する問題