c浮点和整数长度问题(分段错误)

c浮点和整数长度问题(分段错误),c,segmentation-fault,malloc,C,Segmentation Fault,Malloc,我在下面附加了代码,可以打开并读取用c编写的2个ascii文件。 代码编译没有任何问题,但当我执行代码时,首先,它没有正确读取文件,将所有值打印/读取为零,其次,在执行循环外部的printf命令后,给出一个分段错误(内核转储)错误。文件fpin有22行,fpin1有2621440行。我在这个问题上找不到解决办法。如果有人能帮我解决这个问题,我会很感激的 #include <stdio.h> #include <stdlib.h> #include <math.h&g

我在下面附加了代码,可以打开并读取用c编写的2个ascii文件。 代码编译没有任何问题,但当我执行代码时,首先,它没有正确读取文件,将所有值打印/读取为零,其次,在执行循环外部的printf命令后,给出一个分段错误(内核转储)错误。文件fpin有22行,fpin1有2621440行。我在这个问题上找不到解决办法。如果有人能帮我解决这个问题,我会很感激的

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

FILE *fpin,*fpin1;
int i,j,m[1000];
int *n1;
float radp[1000], decdp[1000];
float *rad1,*decd1,*temp1;

n1 = (int *)malloc(sizeof(int));
rad1 = (float *)malloc(sizeof(float));
decd1 = (float *)malloc(sizeof(float));
temp1 = (float *)malloc(sizeof(float));


if( (fpin = fopen("tmp","r")) == NULL)
{
printf("No such file\n");
exit(1);
}
if( (fpin1 = fopen("lfmap.txt","r")) == NULL)
{
printf("No such file\n");
exit(1);
}


for (i=0;i<22;i++){
fscanf(fpin,"%d %f %f",&m[i],&radp[i],&decdp[i]);
printf("%d %f %f\n",i,radp[i],decdp[i]);
}

for (j=0;j<2621440;j++){
fscanf(fpin1,"%d %f %f %f",&n1[j],&rad1[j],&decd1[j],&temp1[j]);
printf("%d %f %f %f\n",n1[j]+1,rad1[j],decd1[j],temp1[j]);
}

printf("%d\n",j);

fclose(fpin);
fclose(fpin1);
free(n1);
free(rad1);
free(decd1);
free(temp1);
}
#包括
#包括
#包括
int main()
{
文件*fpin,*fpin1;
int i,j,m[1000];
int*n1;
浮动radp[1000],decdp[1000];
浮动*rad1、*decd1、*temp1;
n1=(int*)malloc(sizeof(int));
rad1=(浮动*)malloc(浮动大小);
decd1=(浮动*)malloc(浮动大小);
temp1=(浮动*)malloc(sizeof(浮动));
如果((fpin=fopen(“tmp”,“r”))==NULL)
{
printf(“无此类文件”);
出口(1);
}
if((fpin1=fopen(“lfmap.txt”,“r”))==NULL)
{
printf(“无此类文件”);
出口(1);
}
对于(i=0;i
n1
只能保存一个整数,因此访问
n1[0]
是有效的,但
n1[1]
是未定义的行为

其他指针也是如此。也不要强制转换
malloc()

在所有情况下,都是为该类型的单个元素分配内存

其次,

fscanf(fpin,"%d %f %f",&m[i],&radp[i],&decdp[i]);
printf("%d %f %f\n",i,radp[i],decdp[i]);
您正在使用索引
i
访问超限内存。行为未定义

旁注:

  • 始终检查
    fscanf()
    /
    scanf()
    是否成功
  • 请输入
    malloc()
    的返回值

  • 。然后先学习缩进代码。谢谢。我的错。很抱歉缩进了。
    n1 = (int *)malloc(sizeof(int));
    rad1 = (float *)malloc(sizeof(float));
    decd1 = (float *)malloc(sizeof(float));
    temp1 = (float *)malloc(sizeof(float));
    
    fscanf(fpin,"%d %f %f",&m[i],&radp[i],&decdp[i]);
    printf("%d %f %f\n",i,radp[i],decdp[i]);