2012-03-20 173 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

請在示例代碼中添加一些換行符。 – 2012-03-20 21:47:28

+1

您是否需要解除引用'head'當你訪問它時,「頭部」? – alex 2012-03-20 21:49:07

+2

「爲什麼不工作」是錯誤的問題。正確的問題是「我試圖讓X工作的錯誤在哪裏」。你不能假設X在你完全理解之前確實不能工作。 – 2012-03-20 21:50:10

回答

1

只需在ctor中初始化head,它應該可以工作。

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

注: IIRC它被認爲是同樣糟糕風格== NULL,例如== TRUE ...比較好(我不這麼愚見)風格if(!head),但這是化妝品。所以只是一個筆記。

+2

他已經說過,在構造函數中初始化'head'沒有修復它。 – VeeArr 2012-03-20 21:52:32

+0

它的工作,謝謝:D – Transcendental 2012-03-20 21:54:56

+0

@VeeArr:但他沒有顯示ctor,並且如果他/她沒有使用ctor的初始化程序列表,而是有可能會干擾ctor中的其他內容,正如文中所暗示的那樣)在ctor的身體內。相當不同的是,IMO。 – 0xC0000022L 2012-03-20 21:59:43

相關問題