wlowrd 2022-10-10 12:03 采纳率: 33.3%
浏览 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日

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上