2017-01-15 13 views
0

私はほとんどセグメンテーションフォールトが関数が一度呼び出され、私のクラスの一つで、次のコードで発生した理由を、セグメンテーションフォールト

void fileTransfer::createFile(){ 
    std::ofstream fout; 
    fout.open("th.txt", std::ios::binary | std::ios::out); 
    char *toSend = new char(); 
    for (int i=0;i<totalSize_;i++) { 
     toSend[i]=totalData_.front(); 
     totalData_.pop_front(); 
    } 
    std::cout<<"stage 1"<< std::endl; 
    fout.write(toSend, totalSize_); 
    fout.flush(); 
    std::cout<<"stage 2"<< std::endl; 
    fout.close(); 
    std::cout<<"stage 3"<< std::endl; 
} 

を把握しようとしているんだし、私はうまく取得:

stage 1 
stage 2 
Segmentation fault (core dumped) 

なぜこのようなことが起こっているのですか?

+3

'char * toSend = new char();' - なぜ単に 'char toSend;'?理由がないのになぜ 'new'とメモリリークを導入するのですか? – PaulMcKenzie

+0

あなたのtoSendは1つの文字を保持できます。代わりに新しいchar [totalSize_]を使用してください: – Jonas

+0

'totalData_'とは何ですか? – PaulMcKenzie

答えて

4

この:

char *toSend = new char(); 

が、それは、複数の文字の配列であるかのようにあなたがして扱い、単一の動的に割り当てられた文字、を指すポインタを作成します。

char *toSend = new char[totalSize]; 

または類似の、しかし本当にあなたはstd::vector <char>std::stringを使用する:あなたが使用することができます。

+0

今あなたに恋している私のような愚かな間違いは、ありがとう! –

関連する問題