2012-03-27 4 views
1

구조체의 개체를 작성하려고하지만 값을 할당하는 동안 세그먼트 화 오류가 발생합니다. 객체를 생성 한 후에 포인터에 의해리스트로 전달됩니다. 다음은 구현 예입니다.C++에서 포인터가있는 세그먼트 화 오류

struct clientInfo { 
    int client, a, b; 
}; 
List *info=new List(); 

void thread(int which) { 
    clientInfo *cI; 
    cI->client=which; 
    cI->a=4; 
    cI->b=5; 
    info->Append(cI); 
} 

'cI-> client = which'를 실행하는 동안 분할 오류가 생성됩니다. 이 프로젝트는 익숙한 사람들을 위해 nachos 플랫폼에 writting되고 있습니다. 그러나 List의 정의는 C++의 링크 된 목록과 거의 같습니다. Nachos에 익숙하지 않은 사람이라면 'void thread'가 내 'int main'입니다.

미리 감사드립니다.

+0

'nachos' 태그는 무엇을 의미합니까? – cnicutar

+0

@cnicutar : 교육용 운영 체제입니다. 자세한 정보 : http://www.cs.washington.edu/homes/tom/nachos/README – LihO

+0

C++ 책을 읽어야합니다. 너무 많은 포인터, 너무 많은'새로운'. 이것은 C++로 Java 코드를 작성하려는 시도이며 단지 고통 스럽습니다. 권장 도서를 참조하십시오 : http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

답변

2

당신은 C1-6 알킬>회원가 할당 될 때 cI 포인터가 실제로 "당신에게 아무 의미"가리키는

clientInfo *cI = new clientInfo(); 
+1

무한한 지혜는 나의 무한한 어리 석음에 의해서만 능가됩니다. 빠른 응답을 보내 주셔서 감사합니다. – cazzer

2

처럼 clientInfo *cI을 만들어야합니다. 포인터를 사용하기 전에 존재하는 것으로 포인터를 초기화하십시오 (또는 포인터를 할당하십시오).

+0

FWIW, 프로그램 컴파일 방법에 따라 포인터가 임의의 메모리 위치 또는 NULL을 가리킬 수 있습니다. – bryce

+0

@bryce : "어디에도 의미가 없습니다"로 수정되었습니다. –

4

clientInfo *cI;clientInfo 유형의 개체에 대한 포인터를 선언합니다. 이 객체는 생성되지 않습니다. 멤버에 액세스하기 전에 구성해야합니다 (cI = new clientInfo();).

1

당신은 직접 구조 pointer.it에 값을 할당 할 수 없습니다이 같은 새로운를 사용하여 일부 할당을 부여해야합니다 :

clientInfo *cI =new clientInfo(); 

이 작업을 수행 할 해달라고하면

은 객체가 아닌 포인터 *의 CI를 decalre. 아래와 같이 :

clientInfo cI; 

이제 직접 cI.a=... 같은 값을 지정할 수 있으며,이 데이터는 힙에 스택에 stroed 및되지 않습니다.