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

编译没错,运行输入第二个数会直接退出,调试会报错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 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度