Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 17:34   #21
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Код:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1210997056 (LWP 12435)]
0x080499fc in newt::fmin (this=0xbf9e5bc0, x=@0xbf9e5bf8) at newt.cpp:119
119       (func->*nrfuncv)(GetN(), x, fvec);
ciaonataha вне форума Ответить с цитированием
Старый 22.04.2009, 17:56   #22
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Зачем вот это:
Код:
         while(matrice->frontiere[i]!=NULL)
         {
          nt.func = &mv;
          nt.nrfuncv = &interface::equilibre_Fe_Cr_C;
          nt.jacobian = &pf;
          nt.jacobfunc = &interface::Jacobian;
          i++;
         }
Я могу предположить только, что у Вас ни одной итерации не выполняется, а соответственно указатели не инициализируются. В любом случае не вижу смысла в этом цикле. Оставьте просто:
Код:
          nt.func = &mv;
          nt.nrfuncv = &interface::equilibre_Fe_Cr_C;
          nt.jacobian = &pf;
          nt.jacobfunc = &interface::Jacobian;
pu4koff вне форума Ответить с цитированием
Старый 22.04.2009, 18:05   #23
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

У меня уже нервишки шалят. Без этой букли выдает:
Код:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1210956096 (LWP 14032)]
0x0805d34c in __normal_iterator (this=0xbf9eef14, __i=@0xdd84100e)
    at /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator.h:650
650           __normal_iterator(const _Iterator& __i) : _M_current(__i) { }
ciaonataha вне форума Ответить с цитированием
Старый 22.04.2009, 18:09   #24
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Поинтер в интерфасе идет на функцию:
Код:
void interface::equilibre_Fe_Cr_C(int n, std::vector <double> &Y, std::vector <double> &F)
{
Y[0] = ph1->Thermo->y1[0];  
//Для этой линии ошибка:
0x08049af5 in interface::equilibre_Fe_Cr_C (this=0xbf9ef320, n=9, Y=@0xbf9ef408, F=@0xbf9ef3f8) at phase.cpp:105

Y[1] = ph1->Thermo->y1[1];
Y[2] = ph1->Thermo->y2[0];
Y[3] = ph1->Thermo->y2[1];
Y[4] = ph2->Thermo->y1[0];
Y[5] = ph2->Thermo->y1[1];
Y[6] = ph2->Thermo->y2[0];
Y[7] = ph2->Thermo->y2[1];
Y[8] = nf;

 F[0] = ph1->Thermo->pot_chemical1[0] - ph2->Thermo->pot_chemical1[0];
 F[1] = ph1->Thermo->pot_chemical1[1] - ph2->Thermo->pot_chemical1[1];
 F[2] = ph1->Thermo->pot_chemical2[0] - ph2->Thermo->pot_chemical2[0];
 F[3] = Y[0] + Y[1] - 1;
 F[4] = Y[4] + Y[5] - 1;
 F[5] = Y[2] + Y[3] - 1;
 F[6] = Y[6] + Y[7] - 1;
 F[7] = (ph1->Thermo->m[0] * Y[1])/(ph1->Thermo->m[0] + ph1->Thermo->m[1]) * Y[8] + (ph2->Thermo->m[0] * Y[5])/(ph2->Thermo->m[0] + ph2->Thermo->m[1]) * (1 - Y[8]) - X_Cr;
 F[8] = (ph1->Thermo->m[1] * Y[2])/(ph1->Thermo->m[0] + ph1->Thermo->m[1]) * Y[8]  + (ph2->Thermo->m[1] * Y[6])/(ph2->Thermo->m[0] + ph2->Thermo->m[1]) * (1 - Y[8]) - X_C;
}
+
Код:
#4  0x08049a4d in newt::fmin (this=0xbf9ef3d0, x=@0xbf9ef408) at newt.cpp:119
#5  0x0804d8f9 in newt::calc (this=0xbf9ef3d0, x=@0xbf9ef408, check=0xbf9ef404) at newt.cpp:132
#6  0x0805b95a in main () at preci.cpp:83
ciaonataha вне форума Ответить с цитированием
Старый 22.04.2009, 18:12   #25
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Эти линии с ошибками (4,5,6) соответствуют:
(func->*nrfuncv)(GetN(), x, fvec);

Я не понимаю ошибок:
1) Проблемма с заполнением памяти
2)Проблемма с поинтерами?
ciaonataha вне форума Ответить с цитированием
Старый 22.04.2009, 18:23   #26
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Ну попробуйте в конструкторе newt проинициализировать все указатели значением NULL, а перед вызовом проверять, а не NULL ли оно. Если дебаггер замолчит, значит всё хорошо. Иначе - я сдаюсь
pu4koff вне форума Ответить с цитированием
Старый 23.04.2009, 11:43   #27
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Вы были правы. Она равна нулю.
1) Возможно ли, что значения для вектора Y, выходят запределы?;
2)Проблемма в линии while(matrice->frontiere[i]!=NULL) ?;

Код:
int main()
{   
//===========Newton-Raphson======
        nt.nn = 9;
        std::vector <double> Y(nt.nn);
        nt.fvec.resize(nt.nn);
        int check = 0;

        int i=1;
        while(matrice->frontiere[i]!=NULL)
         {
  //          nt.func = &mv;//We transfer the index to object interface
          nt.func=matrice->frontiere[i];  
          nt.nrfuncv = &interface::equilibre_Fe_Cr_C; //We transfer the reference to a class method interface
//          nt.jacobian = &pf; ////We transfer the index to object interface
          nt.jacobian=matrice->frontiere[i];
          nt.jacobfunc = &interface::Jacobian;////We transfer the reference to a class method interface
          i++;
         }
        if (nt.func == NULL) printf("null\n"); else printf("ne null\n");
//==Thermo====
        mat.Thermo->read(T);
        cem.classe0->Thermo->read(T);
        Y[0] = mat.Thermo->y1[0]; //printf ("%lf\n",Y[0]);
        Y[1] = mat.Thermo->y1[1];
        Y[2] = mat.Thermo->y2[0];
        Y[3] = mat.Thermo->y2[1];
        Y[4] = cem.classe0->Thermo->y1[0];
        Y[5] = cem.classe0->Thermo->y1[1];
        Y[6] = cem.classe0->Thermo->y2[0];
        Y[7] = cem.classe0->Thermo->y2[1];
        Y[8] = nf;
//============
//        so.ecriture();
        nt.print = &so;
        nt.on_subproduct = &sortie::ecriture; 
        if (nt.func == NULL) printf("null\n"); else printf("ne null\n");
        nt.calc(Y, &check);
  so.fermeture();

  return(0);
}
ciaonataha вне форума Ответить с цитированием
Старый 23.04.2009, 11:45   #28
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Код:
null
null
Chert, func is NULL!!!
ciaonataha вне форума Ответить с цитированием
Старый 23.04.2009, 12:10   #29
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
int i=1;
while(matrice->frontiere[i]!=NULL)
точно i присвоить 1? не 0 там нужен?
Скорее всего не выполняется условие цикла и ни одной итерации не выполняется
pu4koff вне форума Ответить с цитированием
Старый 23.04.2009, 15:22   #30
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Все, вроде работает.
Спасибо большое, Вы лучшие.
Код:
        while(mat.produit[i]!=NULL)
         {
//      nt.func = &mv;//We transfer the index to object interface
      nt.func=mat.produit[1]->frontiere[1];  
      nt.nrfuncv = &interface::equilibre_Fe_Cr_C;//We transfer the reference to a class method interface

//      nt.jacobian = &pf; ////We transfer the index to object interface
      nt.jacobian=mat.produit[1]->frontiere[1];
      nt.jacobfunc = &interface::Jacobian;////We transfer the reference to a class method interface
          i++;
         }
ciaonataha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делает команда Run.Detach From Program? JY_ Общие вопросы Delphi 3 20.01.2009 13:58
program Project1; необходимо перенести из Pascal в Delphi Toxass Общие вопросы Delphi 22 24.11.2008 08:53
Install (Update program) MAcK Общие вопросы .NET 0 23.10.2008 11:00
Узнать Received XAOC-forever Работа с сетью в Delphi 0 30.09.2008 14:49
Copy Program с изменением атрибутов Трофимов Андрей Паскаль, Turbo Pascal, PascalABC.NET 3 04.07.2007 20:10