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: А вот не подскажете ли мне ещё эху или рассылку, где с подобными > вопросами я не был бы белой вороной? =) Тут я вам ничего посоветовать не могу, не пользуюсь.
Успехов в освоении. С уважением, Алексей А.