[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Продавленный стек



11.09.2014 14:50, Dmitrii Kashin пишет:
> Ага. Ну вот, я наконец понял, что неправильно детектировал проблему.
> Она именно в рекурсивном вызове маршевой функции, а make_step тут не при
> чём.
>
> Поскольку Вы упомянули про неявный return, я попробовал указать return
> явно, слегка переписав функцию, чтобы она возвращала результат:
> ----------------------------------------
> Grid1D
> march (Grid1D grid)
> {
>   <...>
>   if (!finFlag)
>     {
>       printf("Making iteration %06d; Passed time: %f\n", grid.iter+1, grid.time);
>       Grid1D newgrid = make_step(grid, tau);
>       grid = newgrid;
>     }
>   else
>     {
>       printf("Final conditions are reached! Finishing.\n");
>       return grid;
>     };
>   return grid;
> }
> ----------------------------------------
>
> Но всё равно получаю SegFault в следствие переполнения.

Дело ведь не в неявности вызова команды а в рекурсии.
Про неявный return ( ret ) я упомянул для того что бы показать где освобождается стек.
>
>
> Тем не менее, я переписал этот кусок при помощи цикла, и программа вроде
> как валиться перестала. Такой результат меня полностью устраивает,
> спасибо.

Если Grid1D не указатель, то многовато у вас копирования класса в циклах. просядет производительность.
Но для одноразового кода наверно пойдет :)
И я не понял, что там за танцы с newgrid, результат множественных правок? :)
>
> PPS: А вот не подскажете ли мне ещё эху или рассылку, где с подобными
> вопросами я не был бы белой вороной? =)

Тут я вам ничего посоветовать не могу, не пользуюсь.

Успехов в освоении.

С уважением, Алексей А.


Reply to: