C 中的声明给出了分段错误

C 中的声明给出了分段错误,c,C,我正在做学习图表的家庭作业。为此,我将获取一个csv文件,并将该信息保存在传感器结构中 #定义传感器数量70 typedef结构传感器{ int-id; 浮动x,y,z; }传感器; 为了从文件中获取此结构,我使用以下函数: 传感器*获取传感器(字符*文件名){ 文件*FILE=fopen(文件名,“r”); //跳过第一行 char*c; fscanf(文件“%[^\n]”,c); int id=0; 浮动x,y,z; 传感器*Sensor_arr=malloc(sizeof(传感器));

我正在做学习图表的家庭作业。为此,我将获取一个csv文件,并将该信息保存在传感器结构中

#定义传感器数量70
typedef结构传感器{
int-id;
浮动x,y,z;
}传感器;
为了从文件中获取此结构,我使用以下函数:

传感器*获取传感器(字符*文件名){
文件*FILE=fopen(文件名,“r”);
//跳过第一行
char*c;
fscanf(文件“%[^\n]”,c);
int id=0;
浮动x,y,z;
传感器*Sensor_arr=malloc(sizeof(传感器));
fscanf(文件,“%i,%f,%f”,&id,&x,&y,&z);
传感器阵列[0]。id=id;
传感器阵列[0]。x=x;
传感器阵列[0]。y=y;
传感器_arr[0]。z=z;
int计数器=1;
而(!feof(文件)){
fscanf(文件“%i,%f,%f,%f\n”、&id、&x、&y、&z);
++计数器;
传感器_arr=realloc(传感器_arr,计数器*sizeof(传感器));
传感器阵列[计数器-1]。id=id;
传感器阵列[计数器-1].x=x;
传感器阵列[计数器-1]。y=y;
传感器_arr[计数器-1].z=z;
}
fclose(文件);
返回传感器;
}
我用以下代码计算每个传感器之间的距离:

float**get_距离(传感器*s){
浮点数**a=malloc(传感器数量*浮点数*);
对于(int i=0;i
最后,在我的主要步骤中,我打印这些值,如下所示:

inti,j;
int main(){
char file_name[]=“sensor_locations.csv”;
传感器*传感器;
传感器=获取传感器(文件名);
浮动**ar=获取距离(传感器);
对于(i=0;i<70;++i)

对于(j=0;j这是为数组越界错误设计的:

int counter = 1;
...
++counter;
...
[counter-1]
取而代之的是

for(int i=0; more_data; i++)
{
  sensor_arr[i] = ...;
  sensor_arr = realloc(sensor_arr,(i+2)*sizeof(Sensor));
}
请注意


如果您使用的
realloc
是错误的,请使用tmp指针来存储结果,并在将其分配回
sensor\u arr
指针之前检查其是否为空。

请显示必须粘贴在一起的代码段,而不是代码段。还要学习如何使用调试器。
char*c;fscanf(文件“%[^\n]”,c);
无效,您正在使用未初始化指针
c
存储输入的第一行。您应该在代码中添加错误检查。每个
malloc
都可能失败,每个
fscanf
都可能失败,
fopen
可能失败-您只需忽略错误。另一个可能的原因:您的索引可能超出范围,请添加一些代码that检查了这一点。硬连线出现的70个都是危险信号。什么知道任何东西的大小?不清楚任何东西是如何工作的。但症状(崩溃)指向未定义的行为。请描述一下,
distance
函数在此语句中做了什么?
float dis=distance(s[i].x,s[i].y,s[j].x,s[j].y)
问题似乎真的是我对feof(file)的使用。我在文件中编写了一个计数行的函数,在该函数中我使用了fgets的返回值。非常感谢。