2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 ошибка при работе с динамическим массивом
Сообщение06.10.2013, 09:45 


22/06/12
417
ошибка 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 


29/07/13
1
Есть ошибка в самом начале - Вы выделяете память под массив из 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 


22/06/12
417
MonteCristo
Огромный Вам поклон!!! Всё заработало!

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group