fscanf 读取大文件的一个问题,编译通过,执行错误.文件行数较少时也能通过,但15000行就出错了,错在什么地方?
文本文件的格式如下,共有23040行,15列:
1 1 318 179 232 187 1680 -207.00 -15.96 否 1 1 7 1 1
2 1 338 179 232 188 1680 -207.00 -16.86 否 1 1 7 1 2
3 0 334 615 224 177 1482 -207.00 -24.96 否 1 1 1 1 1
4 1 342 179 232 188 1680 -207.00 -24.96 否 2 1 7 1 1
5 0 312 616 224 176 1482 -207.00 -25.86 否 1 1 1 1 2
6 1 338 179 232 187 1680 -207.00 -25.86 否 2 1 7 1 2
7 0 323 616 224 175 1482 -207.00 -33.96 否 2 1 1 1 1
...
...
c++代码如下:
FILE* fp=fopen(m_filename,"r");//打开文本文件
int *a1=(int*)malloc(40000*sizeof(int)),*a2=(int*)malloc(40000*sizeof(int)),*a3=(int*)malloc(40000*sizeof(int));
int *a4=(int*)malloc(40000*sizeof(int)),*a5=(int*)malloc(40000*sizeof(int)),*a6=(int*)malloc(40000*sizeof(int));
int *a7=(int*)malloc(40000*sizeof(int));//为前7列数据开辟空间,并返回指针
double *a8=(double *)malloc(40000*sizeof(double));double *a9=(double *)malloc(40000*sizeof(double));
char a10[256]={" "};//为第10列数据开辟空间,并返回指针
int *a11=(int*)malloc(40000*sizeof(int)),*a12=(int*)malloc(40000*sizeof(int)),*a13=(int*)malloc(40000*sizeof(int));
int *a14=(int*)malloc(40000*sizeof(int)),*a15=(int*)malloc(40000*sizeof(int));//为11~15列数据开辟空间,并返回指针
int num=0;
while (!feof(fp))
{
fscanf(fp,"%d%d%d%d%d%d%d%f%f%s%d%d%d%d%d\n",(a1+num*sizeof(int)),(a2+num*sizeof(int)),(a3+num*sizeof(int)),
(a4+num*sizeof(int)),(a5+num*sizeof(int)),(a6+num*sizeof(int)),(a7+num*sizeof(int)),(a8+num*sizeof(double)),
(a9+num*sizeof(double)),a10,(a11+num*sizeof(int)),(a12+num*sizeof(int)),(a13+num*sizeof(int)),(a14+num*sizeof(int)),
(a15+num*sizeof(int)));
num++;
}
free((void*)(a1));
free((void*)(a2));free((void*)(a3));free((void*)a4);
free((void*)(a5));free((void*)(a6));free((void*)(a7));free((void*)(a8));
free((void*)(a9));free((void*)(a11));free((void*)(a12));free((void*)(a13));
free((void*)(a14));free((void*)(a15));
fclose(fp);/**/
当文本文件的行数较少时,譬如1000行,程序执行没有问题,但如果2万多行就出错了。错在什么地方?请高手解决