求教C++流读写文本文件大数据量时出错的有关问题

求教C++流读写文本文件大数据量时出错的问题
大体描述:

做试验需要,编写了一个简单的C++程序;

建立多个数组,包括 int 和 double 型,使用 new 和 delete 分配和释放空间;

从多个文件中不断读取数据致数组,再将数组中的数据写入一个文本文件,ASCII码。


遇到问题

总是写不完整个文件,程序崩溃。



细节描述:

实际就是一个将多个文件内容进行拼接再写出的过程。

例(实际的数据量比举例的大,但过程一样):

有10个文件,每个文件里存有1000个double型数据。

使用new申请了一个二维数组 double dpData[10][100],每次从这10个文件中顺序读取100个数据,做一些数值处理,再将这100*10个数据写入到一个文件中,每次写入到输出文件每行有10个数据,100行。这样,重复10次读写,就写入到输出文件中每行10个数据,总共1000行。

程序大体流程(伪码):

double **dpData = new double*[10]; // 申请空间
for(n=0; n=10; n++)
{
  dpData[n] = new double[100];
}

for(k=0; k<10; k++) // 1000/100 = 10段,即每个数据文件分10段读出
{
  for(i=0; i<10; i++) //10个文件
  {
  ifstream ifp;
  ifp.open("第i个文件");

  for(j=0; j<k*100; j++)
  {
  ifp >> dTemp; //由于需要顺序读写,之前已经读取了k个100个数据,所以每次读取文件都先让文件指针走到
  //当前需要读取的数据的位置。
  }

  for(j=0; j<100; j++)
  {
  ifp >> dpData[i][j]; //往分配的二维数组里真正写数据
  }

  ifp.close();
  }

  { /* 处理读入的dpData[10][100]个数据 */ }


  ofstream ofp;
  ofp.open("输出文件.txt",ios::app); //以追加的方式打开输出文件

  for(i=0; i<10; i++)
  {
  for(j=0; j<100; j++)
  {
  ofp << dpData[i][j] << ' '; //将处理后的数组写入到输出文件中
  }
  ofp << endl;
  }
  ofp.close();
}

// 释放空间
if(NULL != dpData)
{
  for(n=0; n<10; n++)
  {
  if(NULL != dpData[n])
  {
  delete []dpData[n];
  }
  }
  delete []dpData;
}

程序流程如上,由于数据量过大,不止是10个文件,每个文件的数据也远大于1000,不能一次申请足够的内存空间把数据都装入!但是这样地反复读写,到中途就会崩溃。一般读写一次就需要至少10个小时以上,不能一直调试到问题,第一天让程序运行起来,第二天来看就崩溃了。不是内存泄露的问题,我在程序运行期间查过内存,没泄露。

望有经验的内行执教,非常感谢!




------解决方案--------------------
我对这个问题很感兴趣。
程序崩溃时是什么情况啊?(声明:我不一定能解决这个问题,问一下而已)
------解决方案--------------------
1,ifp.open(...) 下面最好判断一下是否成功
2,代码中这步操作感觉很浪费
for(j=0; j<k*100; j++)
{
ifp >> dTemp; //由于需要顺序读写,之前已经读取了k个100个数据,所以每次读取文件都先让文件指针走到
//当前需要读取的数据的位置。
}

改为:用tellg()返回当前指针的位置,并把它保存下来,下一次再用seekg重定位文件指针。
3,写日志调试