У меня есть рабочая программа, скомпилированная с gcc 3.44, но когда я скомпилировал ее снова, используя 4.44, что-то не так. Некоторые из локальных переменных в функции, по-видимому, изменяются неизвестными, так что цикл for не заканчивается, потому что переменная в ее состоянии постоянно изменяется на 0, даже если она увеличивается. Вызов функции в цикле, кажется, в порядке, потому что он вернул правильный адрес. Я попытался отслеживать значение переменной, в которой затронут цикл, я узнал, что значение изменяется после вызова функции печати в ветке if, удаление или добавление большего количества запросов на печать решает его, но я думаю, что это не имеет никакого отношения к функция печати и нет кода, который модифицирует эту переменную, кроме только инкремента в цикле. Я также попытался отслеживать esp в начале и в конце цикла, это то же самое. Что могло вызвать проблему?проблема стека
ответ
Если это действительно проблема с вашими функциями печати, возможно, вы развращаете стек некоторыми параметрами вариационного списка? Возможно, предположение о том, что у вас есть один из стандартных типов данных или констант перечисления, больше не существует? Это ваши собственные функции печати? Затем попробуйте использовать расширение __attribute__
gcc для проверки типа времени компиляции.
Я не пробовал 4.41 4.42, но у меня есть 4.44 ... – prinzrainer
Вы заявили, что собираетесь перейти от GCC v3.44 (где работает код) до версии 4.4, где код сломан.
Убедитесь, что все остальные части программы (все исходные файлы и файлы библиотек) также скомпилированы с помощью GCC v4.44. Вы вызываете функцию печати, поэтому я предполагаю, что вы ссылаетесь на стандартную функцию printf в glibc. Поэтому убедитесь, что glibc также скомпилирован под v4.44.
- 1. активность проблема стека
- 2. интересная проблема стека?
- 3. Проблема стека активности Android
- 4. Проблема с содержимым стека
- 5. проблема ограничения размера стека iOS
- 6. Проблема стека истории событий Android
- 7. Проблема безопасности стека пула потоков
- 8. Задняя проблема стека с виджетами
- 9. Проблема поиска стека в Java
- 10. Вероятно, проблема стека с Javascript
- 11. проблема переполнения стека в программе
- 12. Проблема с общей библиотекой стека
- 13. iOS - проблема стека диспетчерского управления
- 14. Проблема при удалении viewController из стека навигации
- 15. Logging полная производительность трассировки стека проблема
- 16. проблема с классом стека в C++
- 17. достаточно смешно, это, вероятно, проблема переполнения стека
- 18. Переполнение стека рекурсии/проблема с бесконечным контуром
- 19. Проблема с переполнением стека задачи FreeRTOS
- 20. API переполнения стека - проблема с конечной точкой
- 21. Проблема с конструктором struct, вызывающим переполнение стека
- 22. Проблема MongoMapper с уровнем стека слишком глубока
- 23. Проблема с вызовом стека на C#
- 24. Проблема переполнения стека с массивом связанных списков
- 25. Проблема с СТЛ стека и верхней() функция
- 26. Указатель стека стека прерываний
- 27. Адрес стека и стека
- 28. Ghostscript: Ошибка стека стека
- 29. Поиск стека вызывает переполнение стека
- 30. Проблема с отладкой C#: никакие символы не загружаются ни для какого стека стека вызовов
Похоже на коррупцию в стеке. Переверните код. – sharptooth
Я могу полностью прочитать ваш код здесь ¬_¬ Другими словами, вы хотите, чтобы мы помогли вам рассказать вам, что ваша проблема, или просто общий ответ, другими словами, дать больше информации, конкретно код – thecoshman
код довольно длинный. .. на самом деле это детектор движения ATA на шине pci для моего загрузчика. Мне просто интересно, почему он работал на более старых gcc. – prinzrainer