проблема стека - PullRequest
       11

проблема стека

0 голосов
/ 11 ноября 2010

Я получил рабочую программу, скомпилированную с помощью gcc 3.44, но когда я снова скомпилировал ее, используя 4.44, что-то не так. Кажется, что некоторые локальные переменные в функции изменены неизвестными, так что цикл for не завершится, потому что переменная в своем состоянии постоянно меняется на 0, даже если она увеличивается. Вызов функции из цикла кажется нормальным, потому что она вернулась к правильному адресу. Я попытался отследить значение переменной, на которую влияет цикл, я обнаружил, что значение изменяется после вызова функции печати из ветви if, удаление или добавление дополнительных вызовов print решает ее, но я думаю, что это не имеет никакого отношения функция печати, и нет кода, который изменяет эту переменную, кроме только приращения в цикле. Я также попытался отследить ESP в начале и в конце цикла, это то же самое. Что могло вызвать проблему?

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Вы заявили, что переходите с GCC v3.44 (где работает код) на v4.44, где код не работает.

Убедитесь, что все остальные части программы (все исходные файлы и файлы библиотеки) также скомпилированы с GCC v4.44. Вы вызываете функцию печати, поэтому я предполагаю, что вы ссылаетесь на стандартную функцию printf в glibc. Поэтому убедитесь, что glibc также скомпилирован под v4.44.

0 голосов
/ 11 ноября 2010

Если это действительно проблема с вашими функциями печати, возможно, вы повредили стек некоторыми параметрами из списка переменных? Может быть, предположение, что у вас был один из стандартных типов данных или констант перечисления, больше не выполняется? Это ваши собственные функции печати? Затем попробуйте использовать расширение __attribute__ gcc для проверки типов времени компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...