m0_74909072 2022-11-03 11:19 采纳率: 100%
浏览 39
已结题

编译没错,运行输入第二个数会直接退出,调试会报错Program received signal SIGSEGV,Segmentation fault.明明初始化了,为什么顺序表的长度是1。

#include <stdio.h>
#include<stdlib.h>
#include
#include <string.h>
using namespace std;
#define MAXSIZE 100
#define OVERFLOW 0
#define OK 1
//创建结构体
typedef struct{
int *elem;
int length;
}SqList;
//顺序表的初始化
int InitList(SqList &L){
L.elem=new int[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
return OK;
};
//顺序表的输入
void input(SqList &L) {
int n=0;
printf("请输入你要输入的数据个数:\n");
scanf("%d",&n);
if(n>0){
printf("请输入你要输入的数据:\n");
for(int i=0;i<n;i++){
scanf("%d",&L.elem[i]);
}
}
}
//顺序表的输出
void output(SqList &L){
if(L.length=0){
printf("顺序表中无数据\n");
}else{
for(int i=0;i<L.length;i++){
int a=0;
a=L.elem[i];
printf("%d",a);
}
}
}
//顺序表的取值
void getElem(SqList&L){
int i=0;
printf("请输入你要查找的数据的位置序号\n");
scanf("%d",&i);
if(i<1||i>L.length){
printf("你要查找的数据不存在\n");
}else{
int a=0;
a=L.elem[i-1];
printf("%d",a);
}
}
//顺序表的查找
void LocateElem(SqList&L) {
int a=0;
printf("请输入你要查找的数据\n");
scanf("%d",&a);
for(int i=0;i<L.length;i++){
if(L.elem[i]==a) {
printf("你的数据在第%d个",i+1);
}else{
printf("你查找的数据不存在");
}
}
}
void menu(){
printf("1.创建顺序表\n");
printf("2.顺序表的输出\n");
printf("3.顺序表的取值 \n");
printf("4.顺序表的查找\n");
}
int main(){
menu();
SqList L;
printf("%d\n",L.length);
while (1){
printf("请输入你要执行的操作:\n");
int choice=0;
scanf("%d",&choice);
switch(choice){
case 1:input(L);break;
case 2:output(L);break;
case 3:getElem(L);break;
case 4:LocateElem(L);break;
default:printf("输入错误");break;
}
}
}

  • 写回答

1条回答 默认 最新

  • 伍六七0804 2022-11-03 11:24
    关注

    你没有调用InitList啊 没有初始化

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 11月3日

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题