2014-01-13 4 views
0

콘솔 응용 프로그램에서 콘솔에서 일부 char 데이터를 읽은 다음 구조에 넣습니다. 이 구조는 링크 된 목록으로 사용됩니다. 생성 될 때 첫 번째 목록 요소를 가리키는 포인터 하나와 목록을 실행하는 포인터 하나를 유지합니다. 내게 무슨 일이 일어나는가는 처음으로 목록을 살펴보고 내용을 콘솔에 쓰면 모든 것이 완벽하게 작동한다는 것입니다. 나중에 마지막 요소 목록에 내 실행 포인터를 설정하려면 c000005 액세스 위반 오류로 계속 충돌합니다.포인터로 인해 액세스 위반이 발생합니다.

struct musikdaten { 
    char interpret[150]; 
    char titel[150]; 
    struct musikdaten* next; 
}; 

이 목록의 내용 인쇄 : 내 구조의

정의 : 내가 당신에게 내 코드의 흥미로운 부분 줄 것이다

while (it != NULL) { 
    cout << it->interpret << ": " << it->titel << "\n"; 
    cout << "next: " << it->next << "\n"; 
    it = it->next; 
} 

설정을 "을"목록 마지막 요소로 :

그러나이 마지막 부분은 목록에 두 개 이상의 요소가 포함되어 있습니다. 주 : 콘솔에서 내용을 읽는 동안 새 목록 요소를 추가하면 다음 포인터는 항상 NULL로 초기화됩니다.

+0

을, 'it-> next'는 null이 될 수 있습니다. –

+0

NULL 포인터를 it-> next가 아닌 모든 곳에서 확인하고 올바르지 않은 경우 메시지를 씁니다. 여기에 오류가없는 것 같습니다. – Dejan

답변

2

당신은리스트의 끝을 나타냅니다 NULL으로 next 멤버를 초기화해야합니다

it->next = new musikdaten; 
it->next->next = NULL; 

을 또는 기본 생성자 추가 : - 그것을> next``COUT을 무엇

struct musikdaten { 
musikdaten() { next = NULL; /*TODO: init other members*/}  
char interpret[150]; 
char titel[150]; 
struct musikdaten* next; 
}; 
+0

고마워, 지금 당장! 그게 뭔가있는 줄 알았는데 ... – user3190009

관련 문제