[问题] 读取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