我得到“未处理的类型'System.NullReferenceException'发生的异常”如何解决?

时间:2014-12-13 04:57:49

标签: visual-c++ linked-list nullreferenceexception

我尝试了以下代码,但是我收到了这个错误。

  

未处理的类型' System.NullReferenceException'发生在Linkedlist.exe中的附加信息:对象引用未设置为对象的实例。

我认为问题在于insertlast(),当我检查类似问题的解决方案时,他们谈论实例化新节点。我的方法,即节点* q =新节点; 错误?

struct Node {
    int data;
    Node* next;
};
int is_list_empty(struct Node*head){
    int count=0;
    Node* p = head; 
    while (p!= NULL) 
{ 
  ++count; 
  p = p->next; 
  cout<<"go";
}
    return count;
}

void insertlast(struct Node *head,int value)
{
    Node *q = new Node;
    q->data=value;
    q->next=NULL;
    Node *p=head;
    while(p!=NULL)
    {
        p=p->next;
    }
    q=p->next;
}

void display(struct Node *head){
    Node*p = head;
    while(p!=NULL){
        cout <<p->data<< "  ";
        p=p->next;
    }
}

int main(){
    //Node *head = NULL; 
    Node *head;
    Node *x ;             
    x = (Node*)malloc(sizeof(Node));
    x->data=112;
    x->next = head;
    head = x;
    display(head);  
    //works fine upto here and 112 is displayed
    insertlast(head,34);
    insertlast(head,32);
    insertlast(head,44);
    display(head);
    cout<< is_list_empty(head);
    system("Pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

你应该使头为空。接下来将q分配回p(它应该 p->next=q)是错误的,而你的while循环应该只检查p->next!=NULL
看到我所做的改变。

struct Node {
    int data;
    Node* next;
};
int is_list_empty(struct Node*head){
    int count=0;
    Node* p = head; 
    while (p!= NULL) 
{ 
  ++count; 
  p = p->next; 
  cout<<"go";
}
    return count;
}

void insertlast(struct Node *head,int value)
{
    Node *q = new Node;
    q->data=value;
    q->next=NULL;
    Node *p=head;
    while(p->next!=NULL)
    {
        p=p->next;
    }
   p->next=q;
}

void display(struct Node *head){
    Node*p = head;
    while(p!=NULL){
        cout <<p->data<< "  ";
        p=p->next;
    }
}

int main(){
    //Node *head = NULL; 
    Node *head=NULL;
    Node *x ;             
    x = (Node*)malloc(sizeof(Node));
    x->data=112;
    x->next = head;
    head = x;
    display(head);  
    //works fine upto here and 112 is displayed
    insertlast(head,34);
    insertlast(head,32);
    insertlast(head,44);
    display(head);
    cout<< is_list_empty(head);
    system("Pause");
    return 0;
}