2017-01-15 7 views
0

хорошо я с трудом пытается выяснить, почему ошибка сегментации происходит в следующем коде в одном из моих классов, функция вызывается один раз,ошибки сегментации в ofstream близко C++

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?'? Зачем вводить «новую» и утечку памяти без причины? – PaulMcKenzie

+0

Ваш toSend может содержать только один символ. Вместо этого используйте новый char [totalSize_]: – Jonas

+0

Что такое 'totalData_'? – PaulMcKenzie

ответ

4

Это:

char *toSend = new char(); 

создает указатель, который указывает на один динамически распределяемой характер, который затем лечить, как если бы это был массив из нескольких символов. Вы можете использовать:

char *toSend = new char[totalSize]; 

или подобное, но на самом деле вы хотите использовать std::vector <char> или std::string.

+0

Влюбляюсь в тебя прямо сейчас, такая глупая ошибка, сделанная мной, спасибо! –