這個問題在這里已經有了答案: 宣告大陣列時出現堆疊溢位例外 8 個回答 昨天關閉。
我練習用 C 語言處理檔案。我需要讀取一個記錄了大約 9000000 條資料的檔案。當我讀取前 9000 個資料時它起作用。但是,設定NUM_DATA = 9000000時總是崩潰。我該如何解決這個問題?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX_LENGTH 10
#define NUM_DATA 9000000
int main(int argc, char **argv){
char **signal = malloc( NUM_DATA * MAX_LENGTH * sizeof(char *) );
char **svid = malloc( NUM_DATA * MAX_LENGTH * sizeof(char *) );
char GetString[110];
int num;
double tw[NUM_DATA], ip[NUM_DATA], qp[NUM_DATA]
char a[20], b[20], c[20], d[20], e[20], f[20], g[20], h[20], z[20], x[20], w[20];
FILE *fIn;
fIn = fopen(argv[1], "r");
// read header
fgets(GetString, 109, fIn);
fgets(GetString, 109, fIn);
// read data
num = 0;
while (!feof(fIn)){
fscanf(fIn, "%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%f",
a, b, c, d, e, f, g, h, z, x, w);
tw[num] = atof(a);
ip[num] = atof(z);
qp[num] = atof(x);
signal[num] = malloc(MAX_LENGTH * sizeof(char *));
strcpy(signal[num], f);
strcpy(svid[num], h);
num ;
}
fclose(fIn);
}
檔案格式:
353700.000,1352,0.020000,0.000000,1,ISR1,主,E11,173,14,56.102000 353700.000,1353,0.020000,0.000000,1,ISR1,主,E11,156,7,14.367000 353700.000,1354,0.020000,0.000000, 1,ISR1,Main,E11,161,14,40.136000 353700.000,1355,0.020000,0.000000,1,ISR1,Main,E11,316,23,31.326000.000,1300E,1,100,0.020000,0.000000,1,1,ISR1,Main,E11,316,23,31.326000.0001,100,10,100,100,100,100,100,100,100,000,000,000,000,0.020000. 152,-1,3.806000 353700.000,1357,0.020000,0.000000,2,ISR1,Main,G14,-101,10,51.833000 353700.000,13000004,30000004,13000004 353700.000,1359,0.020000,0.000000,3,ISR1,Main,G24,171,-4,17.890000 353700.000,1360,0.020000,0.0000000,0.00,4G,5G24,171,-4,17.890000.
......
uj5u.com熱心網友回復:
您正在使用該大小的本地陣列溢位堆疊。改為動態分配它們。
double *tw = malloc(NUM_DATA * sizeof(double));
double *ip = malloc(NUM_DATA * sizeof(double));
double *qp = malloc(NUM_DATA * sizeof(double));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366251.html
標籤:C
