[英]Segmentation Fault: 11 with 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
為它們動態分配內存,使它們位於堆上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.