分段故障:11,带Scanf



我有以下代码:

#include "Analysis.h"
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <string.h>
int main(){
FILE *TS;
//Input Files
TS = fopen("IceDat2C.dat","r");
//Parametrization
int i=0,j=0,k=0;;
double temp,tscale;
int points = 3606930
double T[points],A[points],sd[points];
int n[points];
fscanf(TS,"%d %lf %lf %lfn",&n[j],&A[j],&T[j],&sd[j]);
return 1;
}

程序将返回seg。故障:每次11,除非scanf功能不存在。.dat文件就是这样的:带零的列最终会有实数。

1   0.075   1.79    0
2   0.075   1.84    0
3   0.075   1.89    0
4   0.075   1.84    0
5   0.075   1.73    0
6   0.075   1.61    0
7   0.075   1.49    0
8   0.075   1.35    0
9   0.075   1.22    0
10  0.075   1.07    0
11  0.075   0.98    0
12  0.075   0.98    0
13  0.075   0.97    0
14  0.075   0.97    0
15  0.075   0.96    0
16  0.075   0.94    0
17  0.075   0.93    0
18  0.075   0.91    0
19  0.075   0.89    0
20  0.075   0.86    0

我不确定我是否理解为什么这只是扫描失败。我用同样的代码扫描了两列的文件,事情已经解决了。希望你们能帮助我。

数组TAsdnmain函数的本地数组,因此很可能位于堆栈中。其中每一个都有3606930个元素,其中3个类型为double(最可能为8字节(,1个类型为int(最可能是4字节(,因此这些阵列在堆栈上占据了超过100MB的空间。这对于任何实现来说都太大了,所以最终会出现堆栈溢出。

对于这种大小的数组,您应该在文件范围内声明它们,使它们驻留在数据段中,或者使用malloc为它们动态分配内存,使它们位于堆中。

相关内容

  • 没有找到相关文章

最新更新