如何解决细分错误: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 %lf\n",&n[j],&A[j],&T[j],&sd[j]);
return 1;
}
程序将返回段。错误:每次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个字节),而一个类型为int
(最可能为4个字节),因此这些数组占用堆栈上100MB以上的空间。对于几乎任何实现而言,这都太大了,因此最终会导致堆栈溢出。
对于这种大小的数组,您应该在文件范围内声明它们以使其驻留在数据段中,或者使用malloc
为它们动态分配内存以使它们驻留在堆中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。