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

相关问题