这是链表的 C++ 代码。在输入 ch=1 的值后,它会添加一个具有某个值的节点,但在输入一个值后,程序会意外关闭

This is C++ code for linked list. after putting value of ch=1 it will add a node with some value but after putting one value program shuts unexpectdly

#include <iostream>
using namespace std;

class Node{
    public:
        int data;
        Node *next;
};
int main()
{
    Node *head=NULL;
    Node *temp;
    Node *nodeToAdd;
    int ch,val,flag=1;
    while(flag){
        cout<<"\n1.Add   2.Traverse   3.EXIT\n";
        cin>>ch;
        switch(ch){
            case 1:
                nodeToAdd=new Node();
                cout<<"Enter value - ";
                cin>>val;
                cout<<endl;
                nodeToAdd->data=val;
                temp=head;
                while(temp->next!=NULL){
                    temp=temp->next;
                }
                temp->next=nodeToAdd;
                break;
            case 2:
                temp=head;
                while(temp!=NULL){
                    cout<<temp->data;
                    temp=temp->next;
                }
                break;
            case 3:
                flag=0;
                break;
        }
    }
    return 0;
}

请告诉我我的错误,为什么程序在设置 ch=1 后意外终止。将 ch 1 的值放入后,它将一个输入作为值,然后意外终止。

这段代码

temp=head;
while(temp->next!=NULL){
    temp=temp->next;
}
temp->next=nodeToAdd;

已经调用了未定义的行为,因为最初指针 head 可以是空指针并且在表达式 temp->next!=NULL 中取消引用空指针会产生未定义的行为。

另外你忘记设置添加节点的数据成员nextnullptr

按以下方式更改标签 case 1: 下的代码段

case 1:
    cout << "Enter value - ";
    cin >> val;
    cout << endl;

    nodeToAdd = new Node { val, nullptr };

    if ( head == nullptr )
    {
        head = nodeToAdd;
    }
    else
    { 
        temp = head;
        while ( temp->next ) temp = temp->next;
        temp->next = nodeToAdd;
    }
    break;

做之前:

            temp=head;
            while(temp->next!=NULL){

您需要检查 head 是否为 NULL。喜欢

        if (head == NULL)
        {
            // ... Do stuff to insert first element
        }
        else
        {
            // Add to end of list
            temp=head;
            while(temp->next!=NULL){
            ...