运行 时 C 程序突然结束的原因(没有错误)

Reasons for a C program to end all of a sudden while running (with no errors)

我正在使用单链表做一个学生记录管理器。我做了9个函数。

  1. 用于收集数据
  2. 用于在开始处插入
  3. 用于最后插入
  4. 用于在给定的卷号之后插入
  5. 用于在开始时删除
  6. 最后删除
  7. 用于删除具有给定卷号的学生
  8. 用于显示记录
  9. 主要功能

除 2 外一切正常(尽管它正常工作但未提供预期的输出)。 当我执行功能 2 然后执行 8 时,会出现此问题。

//Below is the 2nd function

void insert_after_rollno(void){
    int key,flag=0;
    struct student* ptr=start,*temp;
    printf("\nEnter the roll no to insert a student after that roll no :");
    scanf("%d",&key);
    while(ptr->next!=NULL){
        if(ptr->rollno==key){
            flag=1;
            ptr->next=temp;
            struct student* newnode;
            newnode=collect_data(newnode);
            ptr->next=newnode;
            newnode->next=temp;
            break;
        }
            ptr=ptr->next;
        }
    if (ptr->next==NULL && ptr->rollno==key){
        flag=1;
        ptr->next=temp;
        struct student* newnode;
        newnode=collect_data(newnode);
        ptr->next=newnode;
        newnode->next=temp;
    }
    
    if (flag==0)
        printf("Invalid roll no");
}

//Below is the 8th function

void display(){//verified
    struct student* ptr=start;
    printf("\nRollno\tName\t\tMark1\tMark2");
    while(ptr!=NULL){
        printf("\n%d\t%s\t\t%.2f\t%.2f",ptr->rollno,ptr->name,ptr->marks[0],ptr->marks[1]);
        ptr=ptr->next;
    }
}

您收到错误的原因是因为您最初将 ptr->next 分配为 temp 而不是逻辑上您应该将 ptr->next 存储在 temp 。

制作
ptr->next=temp;
到 temp = ptr->next

if(ptr->rollno==key){
            flag=1;
            ptr->next=temp;  // Why are  you assigning temp here it should be temp = ptr->next
            struct student* newnode;
            newnode=collect_data(newnode);
            ptr->next=newnode;
            newnode->next=temp;  ///
            break;
        }