zhang_923 2020-03-16 09:26 采纳率: 0%
浏览 1257

C语言线性表运行出错,返回Process returned -1073741819 (0xC0000005),找不到错啊

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define ADDSIZE 5
typedef int status;
typedef struct{
    char name[20];
    char id_num[10];
    char post[20];
}staff;
typedef staff ElemType;
typedef struct{
    ElemType *data;
    int length;
    int MaxSize;
}List;
status CreateList(List *L,int n)
{
    int i;
    L->data = (ElemType *)malloc(sizeof(ElemType)*n);
    if(L->data==NULL)
        return ERROR;
    L->MaxSize = n;
    L->length = 0;
    for(i=0;i<n;i++)
    {
        scanf("%s%s%s",L->data[i].name,L->data[i].id_num,L->data[i].post);
        L->length++;
    }
    return OK;
}
void printList(List *L)
{
    int i;
    for(i=0;i<L->length;i++)
    {
        printf("姓名:%s 工号:%s 职务:%s",L->data[i].name,L->data[i].id_num,L->data[i].post);
        printf("\n");
    }

}
status ListDelete(List *L,int n)
{
    int i;
    if(n<1||n>L->length)
        return ERROR;
    for(i=n-1;i<L->length;i++)
        L->data[i]=L->data[i+1];
    L->length--;
    return OK;
}
status ListInsert(List *L,ElemType e,int n)
{
    int i;
    if(n<1||n>L->length+1)
        return ERROR;
    if(L->length>=L->MaxSize)
        L->data = (ElemType *)realloc(L->data,sizeof(ElemType)*(L->MaxSize+ADDSIZE));
    if(L->data==NULL)
        return ERROR;
    if(n==L->length+1)
        L->data[L->length] = e;
    for(i=L->length-1;i>=n-1;i--)
        L->data[i+1] = L->data[i];
    L->data[n-1] = e;
    L->length++;
    return OK;
}
void Entry(List *info)
{
    ElemType e;
    int n;
    printf("请输入要入职的员工信息:\n");
    scanf("%s%s%s",e.name,e.id_num,e.post);
    printf("请输入要插入的位置:\n");
    scanf("%d",&n);
    ListInsert(info,e,n);
    printList(info);
}
void Quit(List *info)
{
    int num;
    printf("请输入要离职员工的序号:\n");
    scanf("%d",&num);
    //ListDelete(info,num);
    printList(info);
}
void Create(List *info)
{
    int n;
    printf("请输入要建立线性表的初始长度,并输入信息:\n");
    info = (List *)malloc(sizeof(List));
    scanf("%d",&n);
    CreateList(info, n);
    printf("显示线性表的内容:\n");
    printList(info);
}
int main()
{
    List *info;
    Create(info);
    Quit(info);
    Entry(info);
    return 0;
}

帮我看看啊,谢谢la

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-25 17:52
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    首先,这段代码定义了一个包含员工信息的结构体staff,以及一个线性表List,其中包含员工信息的数组以及长度和最大容量。代码实现了创建线性表、打印线性表、删除元素、插入元素等功能。 接下来,我帮你解决一下其中的问题:
    1. 在函数Create中,你应该传递List指针的地址,而不是直接传递List指针,这样可以确保在函数内修改List指针的值会影响到外部的List指针。修改后的代码如下:
    void Create(List **info){
        int n;
        printf("请输入要建立线性表的初始长度,并输入信息:\n");
        *info = (List *)malloc(sizeof(List));
        scanf("%d",&n);
        CreateList(*info, n);
        printf("显示线性表的内容:\n");
        printList(*info);
    }
    
    1. 在main函数中,应该将List指针info初始化为NULL,然后将其地址传递给Create函数。修改后的代码如下:
    int main(){
        List *info = NULL;
        Create(&info);
        Quit(info);
        Entry(info);
        return 0;
    }
    
    1. 在函数Quit中,你应该注释掉代码ListDelete(info,num),因为该代码会删除指定位置的员工信息,而不是离职员工的信息。修改后的代码如下:
    void Quit(List *info){
        int num;
        printf("请输入要离职员工的序号:\n");
        scanf("%d",&num);
        //ListDelete(info,num);
        printList(info);
    }
    

    这样就修复了代码中的问题,让其按照预期功能正常运行。希望对你有帮助,如果还有其他问题或疑问,欢迎继续提出。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?