songyitian4 2021-04-10 10:06 采纳率: 100%
浏览 80
已采纳

创建的结构体链表出现了segmentation 问题,求解答

我的代码:

/*
**利用链表实现一个简单的学校教职工信息管理系统:
*(1)教职工信息包括工号、姓名、性别、职称、学位、职务、毕业学校和所学专业等;
*(2)系统的主要功能包括:教职工信息的创建、输出教职工信息、查询教职工信息、增加教职工信息、删除教职工信息。
*
*/
#include<stdio.h>
#include<stdlib.h>

/*
*定义一个“教师”结构体
*/
struct teacher{
    /*
    *数据域
    */
    char teacher_num[6];
    char teacher_name[6];
    char sex;
    char job_title[20];//职称
    char degree[20];//学位
    char duty[20];//职务
    char graduation_school[20];//毕业学校
    char major[15];//专业
    /*
    *指针域
    */
    struct teacher* next;
};
typedef struct teacher* tList;
typedef struct teacher tNode;
/*
*构造一个空链表
*/
int InitList(tList L){
    //malloc 函数返回的是一个地址
    L=(tNode*)malloc(sizeof(tNode));//创建头节点并设置头结点
    L->next=NULL;//首元结点设为空
    return 1;
}
/*
*
*/
int add_teacher_List(tList L){
    tNode *t=(tNode*)malloc(sizeof(tNode));//创建一个节点 
    printf("请输入教职工号:");
    scanf("%s",t->teacher_num);
    printf("请输入教师姓名:");
    scanf("%s",t->teacher_name);
    // t.teacher_num="123";
    // t.teacher_name="song";
    //
    t->next=L->next;//////////////////、、、。。。,,,,,问题所在行
    L->next=t;//头插
    // printf("%s",L->next->teacher_num);
    // printf("%s",t.teacher_name);
    
    return 1;
}
/*
*trouble
*/
void scan(struct teacher *L){
    struct teacher *p=L->next;//让p指针指
    //循环遍历链表L,输出数据
    while(p!=NULL){
        printf("教师姓名:%s ",p->teacher_name);
        printf("教师工号:%s ",p->teacher_num);  
        p=p->next;
    }
}
int main(){
    tList teaList;//创建一个头指针即链表
    InitList(teaList);//初始化链表,参数是头指针
    printf("1 增加信息 2删除信息 3查询信息 4查看信息 5退出\n");
    while(1){
        int choice;
        scanf("%d",&choice);
        switch(choice){
            case 1:add_teacher_List(teaList);
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:scan(teaList);
                break;
            case 5:
                return 0;
        }
    }
    
}
  • 写回答

2条回答 默认 最新

  • cpp_learners 2021-04-10 13:42
    关注

    小问题,初始化时你传的是形参,函数执行完后,teaList没有被分配到内存。

    传指针就好了!

    int InitList(tList *L) {
    	//malloc 函数返回的是一个地址
    	*L = (tNode*)malloc(sizeof(tNode));//创建头节点并设置头结点
    	(*L)->next = NULL;//首元结点设为空
    	return 1;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 ue5运行的通道视频都会有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数