三只跑山猪 2022-10-10 12:03 采纳率: 40%
浏览 29
已结题

将顺序表初始化为1-100,并取第64个,在main中return时出错

将顺序表初始化为1-100,并取第64个,在main中return时出错

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

// 创建顺序表

typedef struct
{
    int* elem;        //声明动态数组
    int length;        //记录表的当前长度
    int size;        //记录表的分配容量(最大长度)
}SqList;


// 初始化顺序表
SqList Initlist(SqList &L)
{
    L.elem = (int*)malloc(sizeof(int));  //构造一个空的顺序表,动态申请存储空间
    if (!L.elem)  //如果申请失败,作出提示并安全退出程序
    {
        printf("初始化失败!");
        exit(0);
    }
    L.length = 0;  //表的初始长度为0
    L.size = MAXSIZE; // 表的存储空间(最大长度)为MAXSIZE 

    return L;
}

//取值
int GetElem(SqList L, int i, int& e)
{
    if (i < 1 || i > L.length)   //判断i的值是否合理(是否为负数或是否超出表长),不合理返回ERROR
    {
        printf("获取值失败!");
        exit(0);
    }

    e = L.elem[i - 1];  // elem[i - 1]单元存储第i个数据元素

    return e;
} 

// 赋值
void get_value(SqList &L)
{
    int i, n;
    //scanf_s("%d",&n);
    for (i = 0; i < L.size; i++)
    {
        L.elem[i] = i + 1;
        L.length++;//长度随赋值情况增加
    }
    
}
    
int main(void)
{    
    int i= 64;     //取值第64个元素
    int e , t;
    SqList L;  // 声明顺序表
    Initlist(L); //初始化
    get_value(L);  //赋值
    t = GetElem(L, i, e); //取值
    printf("%d", t);
    
    free(L.elem);
    return 0;
}

下面是报错:

img

  • 写回答

1条回答 默认 最新

  • lzl2040 人工智能领域新星创作者 2022-10-10 12:19
    关注

    这个分配内存错了,应该是如下这个:

    L.elem = (int*)malloc(MAXSIZE * sizeof(int));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月11日
  • 已采纳回答 10月10日
  • 创建了问题 10月10日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向