Это странно, потому что, если код повреждает стек, процесс не должен работать, как я.
Разрушение стека - неопределенное поведение, поэтому что угодно может произойти, в том числе программа, которая работает правильно для некоторых входных данных и с некоторыми комбинациями флагов компиляции.
Есть ли способ (с помощью отладчика g cc -ecplise) выяснить, что строка, которая приводит к этой ошибке?
Вы не можете определить строку , которая вызывает разрушение стека, но вы должны быть в состоянии определить функцию в что это происходит, а затем (если ошибка все еще не очевидна) уменьшите тело этой функции до просто оператора, который вызывает переполнение буфера стека.
Для этого скомпилируйте с -g
, запустите программа под GDB (или Eclipse), и используйте команду where
в точке cra sh.