2012-03-20 2 views
0

여기 내 코드NULL 포인터가 작동하지 않는 이유는 무엇입니까?

class LList{ 
struct Elem{int data;Elem *next;};  
Elem *head; 
public: 


void Push(int dat){ 
    if(head==NULL){ 
    head=new Elem; 
    head->data=dat; 
    head->next=NULL; 
    } else { 
    // ...... 
    } 
} 

입니다하지만 난 그것을 사용하는 경우, 그것은 작동하지 않습니다. 문제는 포인터가 NULL이된다는 것을 결코 발견하지 못합니다. 그리고 그것은 NULL입니다. 심지어 NULL을 생성자의 포인터에 할당하더라도 작동하지 않습니다. Visual Studio에서 원하는 메모리 위치에 액세스 할 수 없다는 오류가 표시됩니다.

+3

예제 코드에 줄 바꿈을 추가하십시오. –

+1

'head'를 참조 해제해야합니까? 예 : 당신이 그것을 접근 할 때'머리'? – alex

+2

"X가 작동하지 않는 이유는 무엇입니까?"는 잘못된 질문입니다. 올바른 질문은 "X 작업을 시도하는 데있어서 내 오류"입니다. X가 완전히 이해할 때까지 실제로 작동하지 않는다고 가정 할 수는 없습니다. –

답변

1

ctor에서 head을 초기화하기 만하면됩니다.

class LList{ 
    //... 
    LList() : head(0) {} // or head(NULL) if you prefer 
    // ... 
}; 

참고 : 예를 == TRUE 경우와 == NULL과 비교 IIRC이 고려된다 똑같이 나쁜 스타일 (내 그리 소견에서) 더 나은 스타일 if(!head)이지만, 그 화장품입니다. 그래서 메모.

+2

그는 이미 생성자에서'head'를 초기화하지 않았다고 말했습니다. – VeeArr

+0

감사합니다 : D – Transcendental

+0

@VeeArr :하지만 그는 ctor를 표시하지 않았으므로 ctor의 초기 목록을 사용하지 않고 ctor의 다른 항목이 간섭을 받았을 가능성이 있습니다. ctor의 몸 안에 텍스트가 함축 한 것처럼). 확실히 다른 점은, IMO. – 0xC0000022L

관련 문제