gpt4 book ai didi

c - 在数组 : Segmentation fault (core dumped) 中插入一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:07 24 4
gpt4 key购买 nike

这是我在 C 中的代码,我将 L 声明为非指针变量,但在运行程序后我意识到它在调用 Insert 函数后并没有真正改变数组中的值。所以我将 L 的声明更改为

SeqList* L

我在其中放置了一个额外的 * 符号并相应地更改了那些 .到 -> ,但现在我不断得到

Segmentation fault (core dumped)

消息?我在哪里遗漏了什么?谢谢!

#include "stdio.h"

#define MAXSIZE 100

typedef struct SeqList{
int elem[MAXSIZE];
int last;
} SeqList;

int GetData(SeqList* L,int i){
return L->elem[i];
}

void Insert(SeqList* L, int i, int e){
int temp;
if (i < 1 || i > L->last + 2){
printf("Invalid Inserting point.\n");
}
if (L->last > MAXSIZE){
printf("List already full.\n");
}
for(temp = L->last; temp != i; temp--){
L->elem[temp+1] = L->elem[temp];
}
L->elem[temp] = e;
L->last++;
}

int main(){
SeqList* L;
int i;
for(i=0;i<10;i++){
L->elem[i] = i*i;
}
Insert(L,5,10);
for(i=0;i<10;i++){
printf("%d\n", L->elem[i]);
}
printf("%d\n", GetData(L,5));
}

最佳答案

下面的代码块不好,因为您没有为 L 分配内存并且正在使用它,就好像它指向有效内存一样。

SeqList* L;
int i;
for(i=0;i<10;i++){
L->elem[i] = i*i;
}

这解释了段错误。

我不确定您在尝试上述操作之前尝试了什么,但以下程序对我有用。

#include "stdio.h"

#define MAXSIZE 100

typedef struct SeqList{
int elem[MAXSIZE];
int last;
} SeqList;

int GetData(SeqList* L,int i){
return L->elem[i];
}

void Insert(SeqList* L, int i, int e){
int temp;
if (i < 1 || i > L->last + 2){
printf("Invalid Inserting point.\n");
}
if (L->last > MAXSIZE){
printf("List already full.\n");
}
for(temp = L->last; temp != i; temp--){
L->elem[temp+1] = L->elem[temp];
}
L->elem[temp] = e;
L->last++;
}

int main(){
SeqList L;
int i;
for(i=0;i<10;i++){
L.elem[i] = i*i;
}
L.last = 10;
Insert(&L,5,10);
for(i=0;i<10;i++){
printf("%d\n", L.elem[i]);
}
printf("%d\n", GetData(&L,5));
}

关于c - 在数组 : Segmentation fault (core dumped) 中插入一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com