簡體   English   中英

分段錯誤:11 與 Scanf

[英]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

我不確定我明白為什么這只是掃描失敗。 我使用相同的代碼來掃描包含兩列的文件,事情已經解決了。 希望你們能幫幫我。

數組TAsdnmain函數的局部數組,因此很可能駐留在堆棧中。 其中每一個都有 3606930 個元素,其中 3 個是double類型(很可能是 8 個字節),一個是int類型(很可能是 4 個字節),因此這些數組在堆棧上占用了超過 100MB 的空間。 這對於幾乎任何實現來說都太大了,所以你最終會出現堆棧溢出。

對於這種大小的數組,您應該在文件范圍內聲明它們,以便它們駐留在數據部分中,或者使用malloc為它們動態分配內存,使它們位於堆上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM