开发平台(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
请各位解答一下为什么会这样与怎么样可以改进><
感激不尽~