2013-07-29 6 views
0

저는 C++ 입문 과정에 있으며 제 프로그램은 복사 기능에서 segfaulting하고 있습니다. GDB를 사용할 때 위치 0x0에서 char *에 액세스 할 수 없다고 말합니다. 이상한 점은 오류없이 여러 번이 함수를 작성했다는 것입니다. ///////////////////Segfault가 char * strcpy를 시도했습니다 *

int question::set_question(char * question) 
{ 
your_question = new char [strlen(question)+1]; 
strcpy(your_question, question); 

} 

class question 
{ 
public: 
question(); 
~question(); 
int set_question(char * question); 
int copy_question(question & to_copy); 
int clear_question(); 
int display(); 
char* retrieve_question(); 
char* retrieve_answer(); 
private: 
char* your_question; 
char* correct_answer; 

}; 

프로그램 수신 신호 SIGSEGV GDB에서 에러 코드 , 세그멘테이션 오류. 는 [스레드로 전환 1 (LWP 1)] question.cpp에서 문제의 :: set_question 0x00013af8 (이 0x0으로, 질문 = 0x257a8는 "영화처럼을?"=) : 51

51 your_question = 새 char [strlen (question) +1];

(GDB) 페이지 나 strlen (질문)

$ 1 = 27

(GDB) 페이지 your_question

0x0 주소의 메모리를 액세스 할 수 없습니다

답변

0

I C++에서는 전문적이지 않지만 멤버 함수 set_question을 호출하기 전에 클래스 question을 초기화합니까? question 클래스가 초기화되지 않은 것으로 보입니다.

0

초기화되지 않은 개체에서 set_question 메서드를 호출하고 있습니다. 당신은 GDB 출력에서이를 볼 수 있습니다

question::set_question (this=0x0, question=0x257a8 "do you like movies??") 

을 '이'0x0으로

문제는이 방법 밖에 안된다. 기본적으로 새로 할당 된 배열은 전체 'question'객체가 존재하지 않기 때문에 'your_question'멤버에 할당 될 수 없습니다.

당신은 아마 정확히 다음을 수행하지 않지만이 문제 설명한다 :

question *q = NULL; 
q->set_question(...);