我有以下代码:
#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
我不确定我是否理解为什么这只是扫描失败。我用同样的代码扫描了两列的文件,事情已经解决了。希望你们能帮助我。
数组T
、A
、sd
和n
是main
函数的本地数组,因此很可能位于堆栈中。其中每一个都有3606930个元素,其中3个类型为double
(最可能为8字节(,1个类型为int
(最可能是4字节(,因此这些阵列在堆栈上占据了超过100MB的空间。这对于任何实现来说都太大了,所以最终会出现堆栈溢出。
对于这种大小的数组,您应该在文件范围内声明它们,使它们驻留在数据段中,或者使用malloc
为它们动态分配内存,使它们位于堆中。