c float 和 int 长度问题(段错误)

标签 c segmentation-fault malloc

我在下面附加了我的代码,该代码打开并读取用 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);
}

谢谢, 克里希纳库玛

最佳答案

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]);

您正在使用索引i访问越界内存。行为未定义。

旁注:

  1. 始终检查 fscanf()/scanf() 是否成功。
  2. do not cast malloc()的返回值。

关于c float 和 int 长度问题(段错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721047/

相关文章:

c - 如何在 C 中将基于文本的数据文件读入数组?

c - 在 C 中操作字符串时,仅在发布配置中出现段错误

c - C : Merge Sort implementation - memory allocation 错误

c - 使用 libcurl 作为 XML 文件发送 SOAP 请求

c - 在哪里可以找到 off_t 类型的完整定义?

c - 为什么 C 编译器不捕获此错误?

c - free() 上的段错误指向 char* 的指针

c - fscanf() 代码并不总是会导致内存崩溃,但有时

c++ - C/C++ 未使用的内联函数 undefined reference

c - 以下函数在 strncpy 上给出段错误,有人可以解释为什么会发生此段错误