2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 ошибка при работе с динамическим массивом
Сообщение06.10.2013, 09:45 
ошибка heap corruption detected: after normal block "#355"
Ситуация такая, научился работать с динамическим массивом, чтение, вывод на экран, запись. Решил применить его к своей программе - вычисление интеграла методом Гаусса-Кристоффеля, в итоге вылазит ошибка. При этом если нажимать "пропустить" в окошке Debug Library, то читается фаил и вычисляется следующие приближение. И так столько раз, какая точность поставлена. В вобщем наверное всё отлично работает, лишь вылазит постоянно это ошибка. Подскажите пожалуйста как избавится от неё.

Код:
int main( void )
{
   
    int i,j;
    int n=2;
    long double S, Sn, e=0.000001;
   S=0;
    //double mas[n] [n + 1];
      
    for (;;)
   {
      long double**mass=new long double*[n];
      for(int i=0; i<=n;i++) 
         mass[i]=new long double[2];
/*      
        char* nfile;
      itoa (n, nfile, 16);
//другой способ:
std::stringstream sstrm;
sstrm << "D:\\Tab" << nfile << ".txt";
std::string str = sstrm.str();

//и еще один способ, не работающий:
       
       string str=string("D:\\Tab")+ string(nfile) + string(".txt");

*/
      ostringstream ostr;
      ostr << "D:\\data\\" << n << ".txt";
      string str = ostr.str();/**/



      ifstream input_file(str);
      for(i=0;i<n;i++)
         for(j=0;j<2;j++)
            input_file>>mass[i][j];
      input_file.close ();

      Sn=0;
      for (i=0; i<n; i++)
         for (j=0; j<n; j++)
            Sn+=mass[i][1]*mass[j][1]*exp(-2*mass[i][0]*mass[j][0]);
       
      cout << "Iteration N_" << n << "   I=" << Sn<<"\n";
       
      for (i=0;i<n;i++)
         delete[]mass[i];
      delete[]mass;
      if (fabs(S-Sn)<e)
      {
         break;
        }
      S=Sn;   
        n=n+1;
    }
    return (0);
}


[img][img]http://img571.**invalid link**/img571/8787/a698.png[/img][/img]

[img][img]http://img46.**invalid link**/img46/688/75h7.png[/img][/img]

 
 
 
 Re: ошибка при работе с динамическим массивом
Сообщение06.10.2013, 12:45 
Есть ошибка в самом начале - Вы выделяете память под массив из n элементов:
Код:
long double**mass=new long double*[n];
Но затем в цикле выделяете память для n+1 массива:
Код:
for(int i=0; i<=n;i++)
    mass[i]=new long double[2];

 
 
 
 Re: ошибка при работе с динамическим массивом
Сообщение06.10.2013, 19:11 
MonteCristo
Огромный Вам поклон!!! Всё заработало!

Единственная проблемка осталась, это то что при выводе программой моих Iteration, последние два значения I нулевые. Но это решить уже не понятно как...

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group