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

创建的结构体链表出现了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条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料