C++ 为什么';空指针不能工作吗?

C++ 为什么';空指针不能工作吗?,c++,null,C++,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

这是我的密码

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给了我一个错误,说明我无法访问所需的内存位置。

只需在ctor中初始化
head
,它就可以工作了

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

注意:IIRC与
==NULL
相比,它被认为是同样糟糕的样式,例如
==TRUE
。。。更好的(我并不那么谦虚)风格是
if(!head)
,但那是化妆品。所以请注意。

请在示例代码中添加一些换行符。访问时是否需要取消引用
标题
,例如
*标题
。“为什么X不起作用”是错误的问题。正确的问题应该是“我试图让X工作的错误在哪里”。在你完全理解X之前,你不能假设X实际上不起作用。我不是来读别人的哲学的。我请求帮助。如果你不想帮助别人,那就不要评论。@unreal:不要对那些真正想帮助你的人苛刻。你可能不喜欢一些评论,但人们往往在错误的地方寻找解决方案,或者认为问题不在他们做事的方式上。如果你不愿意接受批评,不要问问题。他已经说过在构造函数中初始化
head
并没有解决这个问题。@VeeArr:但他没有显示ctor,如果他/她没有使用ctor的初始值设定项列表,而是赋值(如文本所示),则ctor中很有可能会有其他东西干扰在医生体内。很不一样,依我看。