【发布时间】:2021-04-27 16:54:22
【问题描述】:
所以我有一个结构,我想用一个循环从用户输入中获取函数并将它们存储到结构中。但是在 1 个循环之后,程序因分段错误而崩溃,我找不到问题。
这是错误:
> clang-7 -pthread -lm -o main main.c
> ./main
4
ath
67
68
thes
exited, segmentation fault
>
代码如下:
#define STR 100000
typedef struct city{
float x;
float y;
char *name;
}City;
City *GetCities(int *N){
int i;
City *p;
char c;
scanf("%d",&*N);
p=malloc(sizeof(City));
p->name=malloc(STR*sizeof(char));
if (p->name==NULL){
printf("Could not find enough memory");
}
for (i=0; i<*N; i++){
while((c = getchar()) !='\n' && c!= EOF);
fgets(p[i].name,STR,stdin);
p[strcspn(p[i].name,"\n")].name="\0";
p[i].name=realloc(p[i].name,(strlen(p[i].name)+1)*sizeof(char));
scanf("%f ",&p[i].x);
scanf("%f",&p[i].y);
}
return p;
}
【问题讨论】:
-
使用调试器。至少它会立即准确地告诉您哪一行代码触发了段错误。获取最少的信息并将其发布在问题中。也可以使用调试器检查崩溃点的状态以及导致它的状态。
-
p[i].name,p不是数组 -
为什么要做这件事:
scanf("%d",&*N); -
@IrAM scanf 是 Cities 用户想要存储到 struct 中的次数。如何使 p 成为包含 struct (string name,x,y) 元素的数组?
-
@VasilisNakos 我认为您错过了@IrAM 评论的重点。
&*N是语法错误。
标签: c struct memory-management malloc dynamic-memory-allocation