2017-01-15 5 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는 하나의 문자 만 보유 할 수 있습니다. 대신 새로운 char [totalSize_]를 사용하십시오 : – Jonas

+0

'totalData_' 란 무엇입니까? – PaulMcKenzie

답변

4

이 :

char *toSend = new char(); 

는 여러 문자의 배열처럼 당신이 다음 치료 단일 동적으로 할당 된 문자를 가리키는 포인터를 만듭니다.

char *toSend = new char[totalSize]; 

또는 이와 유사한,하지만 정말 당신은 std::vector <char> 또는 std::string를 사용하려면 : 당신은 사용할 수 있습니다.

+0

지금 너와 사랑에 빠진 메신저, 나 같은 어리석은 실수! 고마워! –