[問題] 讀取TXT中大量資料時 出現已經停止運作

作者: sword0921 (Nerooooooo)   2014-06-17 15:56:24
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Code::Blocks
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
我需要讀取一個TXT檔
裡面使用空白或TAB作為分段
在大約讀取超過50K筆(每筆有16的維度)資料時
編譯過後,執行程式時,會出現已經停止運作
此時連MAIN都沒有進去(有用printf測試過)
而50K筆時可正常執行
餵入的資料(Input):
0 11 17 4 10 29 4 18 18 22 14 5 5 1 27 1
1 11 25 2 27 6 21 24 2 3 22 22 21 26 8 5
2 17 6 11 18 9 22 17 19 25 24 23 21 2 3 3
.
.
.
.
預期的正確結果(Expected Output):
可進入MAIN執行後續步驟
錯誤結果(Wrong Output):
XXX.exe已經停止運作
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define num_data 100000//開啟資料筆數
#define num_tran 16 //開啟資料的維度屬性
#define num_server 10 //開啟server數量
#define RegionMax 100
struct data{
int ID;
int Xvelue;
int Yvelue;
int Part;
};
int main(){
FILE *fP_r;
int i,j,k,l;
clock_t start_time,end_time; // 宣告時間點
float TOTLE_time;
start_time = clock();
struct data *base;
base = (struct data *) malloc((num_data+1)*sizeof(struct data));
fP_r = fopen("IndepInput1(200k).txt", "r");
if (!fP_r) {
printf("open file fail...\n");
exit(1);
}
for(i=1;i<=num_data;i++){
base[i].Xvelue = 0;
base[i].Yvelue = 0;
fscanf(fP_r,"%d",&base[i].ID);
for(k=1;k<=num_tran;k++){
if(k<=(num_tran-1)/2){ //將ID後的欄位數的前半當作X值
fscanf(fP_r,"%d",&l);
base[i].Xvelue = base[i].Xvelue + l ;
}
if(k > (num_tran-1)/2 && k < num_tran){ //將欄位後半段設為X值
fscanf(fP_r,"%d",&l);
base[i].Yvelue = base[i].Yvelue + l ;
}
}
//printf("%d %d
%d\n",base[i].ID,base[i].Xvelue,base[i].Yvelue);
}
printf("\n");
printf("*\n");
fclose(fP_r);
到這邊為止是開啟檔案的部分
補充說明(Supplement):
更之前是30K可以開 50K打不開
後來修改一下struct 內部的東西才能夠開到50K
但最終可能需要開到200K
請各位解答一下為什麼會這樣與怎麼樣可以改進><
感激不盡~
作者: Killercat (殺人貓™)   2014-06-17 16:01:00
gdb看看是不是掛在malloc那行?
作者: mabinogi805 (焚離)   2014-06-17 16:05:00
感覺是要不到空間
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-06-17 16:57:00
現有一條柴很長,直的放進爐門會突出來,橫的兩邊會卡到根本放不進去,要怎麼解決。
作者: Killercat (殺人貓™)   2014-06-17 17:15:00
一次malloc那麼大一塊 其實出包機會還滿大的
作者: HaoCherHong (Hao-Cher Hong)   2014-06-17 22:18:00
斜著放!!
作者: lc85301 (pomelocandy)   2014-06-17 23:00:00
燒毀~
作者: windincloud (虹霓之戀)   2014-06-18 13:25:00
利用malloc()後最好養成檢查有沒有取得空間的好習慣:)
作者: Killercat (殺人貓™)   2014-06-18 13:35:00
有些實作會因為page fault直接卡在malloc卡很久
作者: KevinR (Kevin)   2014-06-18 15:45:00
建個大一點的爐子?
作者: PUTOUCHANG (自己的廢文自己發)   2014-06-18 22:06:00
換另一條柴

Links booklink

Contact Us: admin [ a t ] ucptt.com