Лабаю одну и ту же прогу в VS 2010 b Code::Blocks 10.05 c MinGW.
• Microsoft Visual Studio 2010 со штатным компилятором среды;
• Code::Blocks версии 10.05 с пакетом MinGW и компилятором g++ версии 4.6.1.
На ноуте, с которого сейчас пишу, прога работает совершенно одинаково (разве что мигвешная побыстрее).
На домашнем компе до некоторого момента тоже работала совершенно одинаково.
Но потом случилось интересное кино: мингвешная версия перестала работать с вещественными числами.
Вместо нормальных значений выдаются нули. Целые при этом выдаются совершенно нормально.
Из студии та же прога работает совершенно нормально. На ноуте в обоих средах все работает совершенно нормально.
Отключил все оптимизации — результат не изменился.
Переустановил Code::Blocks — не помогает...
Ноут —
Имя ОС Microsoft Windows XP Professional
Версия 5.1.2600 Service Pack 3 Сборка 2600
Изготовитель ASUSTeK Computer Inc.
Модель X51RL
Тип Компьютер на базе X86
Процессор x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1862 МГц
Полный объем физической памяти 2 048,00 МБ
Доступно физической памяти 944,41 МБ
Всего виртуальной памяти 2,00 ГБ
Доступно виртуальной памяти 1,96 ГБ
Домашний компьютер:
Проверка проводилась на следующей платформе:
• Процессор Intel® Core™ i3 CPU 530 @2.93, индекс производительности 6.9;
• Оперативная память 4 Гб, индекс производительности 5.9;
• Операционная система Windows 7 Максимальная, 64-разрядная.
Трансляция выполнялась в 32-битном режиме.
Операционка влияет ? Но до определенного момента все работало
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Добавлю.
Прога получает из командной строки параметры.
Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь:
вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр.
Как будто из памяти выводится строки и там нет завершающего нуля.
Еще раз повторю, что на ноуте обе проги работают совершенно одинаково.
И на домашнем компе тот же текст в VS 2010 работает совершенно нормально.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Добавлю. LVV>Прога получает из командной строки параметры. LVV>Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь: LVV>вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр. LVV>Как будто из памяти выводится строки и там нет завершающего нуля. LVV>Еще раз повторю, что на ноуте обе проги работают совершенно одинаково. LVV>И на домашнем компе тот же текст в VS 2010 работает совершенно нормально.
Практика показывает, что гадать и сравнивать обычно не имеет смысла. Куда полезнее посмотреть отладчиком, что конкретно поломалось и потом уже думать, как это могло произойти.
PS: atof не выводит строки.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Тот кто сидит в пруду, Вы писали:
ТКС>Здравствуйте, LaptevVV, Вы писали:
LVV>>Добавлю. LVV>>Прога получает из командной строки параметры. LVV>>Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь: LVV>>вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр. LVV>>Как будто из памяти выводится строки и там нет завершающего нуля. LVV>>Еще раз повторю, что на ноуте обе проги работают совершенно одинаково. LVV>>И на домашнем компе тот же текст в VS 2010 работает совершенно нормально. ТКС>Практика показывает, что гадать и сравнивать обычно не имеет смысла. Куда полезнее посмотреть отладчиком, что конкретно поломалось и потом уже думать, как это могло произойти. ТКС>PS: atof не выводит строки.
Понятно. Значит, никто не сталкивался.
В том-то и дело, что отладчик здесь не при делах.
Вот смотрите: один и тот же текст программы.
1. в Студии 2010 на ноуте — работает корректно
2. С кодеблоксе на ноуте — работает нормально.
3. В студии 2010 на домашнем — работает нормально
4. В кодеблоксе на домашнем — глючит.
Разница — в операционной системе.
PS. Я не вывожу строку функцией atof(). Она используется для перевода одного из параметров командной строки. После перевода при выводе уже из переменной значения выводится 1500-2000 цифр (как строка без нуля).
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>В том-то и дело, что отладчик здесь не при делах.
Отладчик — это, как обычно, инструмент, чтобы зря не гадать.
LVV>Вот смотрите: один и тот же текст программы. LVV>1. в Студии 2010 на ноуте — работает корректно LVV>2. С кодеблоксе на ноуте — работает нормально. LVV>3. В студии 2010 на домашнем — работает нормально LVV>4. В кодеблоксе на домашнем — глючит. LVV>Разница — в операционной системе.
Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.
LVV>PS. Я не вывожу строку функцией atof(). Она используется для перевода одного из параметров командной строки. После перевода при выводе уже из переменной значения выводится 1500-2000 цифр (как строка без нуля).
Так непосредственно после atof шестнадцатиричное представление нормальное или как? 2000 цифр — это ни о чем. float — не черный ящик, ее и без перевода в строку проверить можно.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Тот кто сидит в пруду, Вы писали:
LVV>>В том-то и дело, что отладчик здесь не при делах. ТКС>Отладчик — это, как обычно, инструмент, чтобы зря не гадать. ТКС>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.
Тогда вопрос: каким отладчиком?
WinDBG? Или есть более серьезные?
Или GNU dbg?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Тот кто сидит в пруду, Вы писали:
LVV>>>В том-то и дело, что отладчик здесь не при делах. ТКС>>Отладчик — это, как обычно, инструмент, чтобы зря не гадать. ТКС>>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать. LVV>Тогда вопрос: каким отладчиком? LVV>WinDBG? Или есть более серьезные? LVV>Или GNU dbg?
странное такое видеть, я даже несколько шокирован %)
как вы вообще можете без отладчика программированием заниматься?
не, я понимаю что в 99% случаях отладчик не нужен, но для 1% им надо уметь пользоваться
> каким отладчиком?
а каким вы умеете? можно и отладчиком MSVC, в окне дизасма.
я бы использовал OllyDbg, но это исключительно дело привычки.
на всякий случай, напомню, что точку останова можно добавить функцией DebugBreak() или инструкцией int3, хотя *(int*)0 = 0; тоже работает.
вообще кроме запуска под отладчиком можно еще дизасм посмотреть чем-нибудь, не запуская.
Здравствуйте, LaptevVV, Вы писали:
LVV>>>В том-то и дело, что отладчик здесь не при делах. ТКС>>Отладчик — это, как обычно, инструмент, чтобы зря не гадать. ТКС>>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать. LVV>Тогда вопрос: каким отладчиком? LVV>WinDBG? Или есть более серьезные? LVV>Или GNU dbg?
Когда я последний раз пользовался mingw, а это было довольно давно, несколько лет назад, его формат виндовые отладчики не понимали. Так что если с тех пор ничего не изменилось, то пользоваться придется gdb из комплекта. Хоть он и уродский.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Abyx, Вы писали:
A>странное такое видеть, я даже несколько шокирован %) A>как вы вообще можете без отладчика программированием заниматься?
Молча, конечно... A>не, я понимаю что в 99% случаях отладчик не нужен, но для 1% им надо уметь пользоваться A>а каким вы умеете? можно и отладчиком MSVC, в окне дизасма.
Да любым умею...
Пока в студии работаешь, используешь встроенный отладчик, которого для моих задач хватает за глаза.
Да и "хитрых" ошибок я давно не делаю, поскольку давно проповедую принцип KISS... ^) >> каким отладчиком? A>я бы использовал OllyDbg, но это исключительно дело привычки.
А вот за это — спасибо. A>на всякий случай, напомню, что точку останова можно добавить функцией DebugBreak() или инструкцией int3, хотя *(int*)0 = 0; тоже работает.
Ну, про архитектуру Intela мне известно. И книги Джона Роббинса у меня тоже есть... A>вообще кроме запуска под отладчиком можно еще дизасм посмотреть чем-нибудь, не запуская.
Я думаю, что дело не в программе, а в окружении. Поэтому дизассемблировать и копаться в коде не вижу смысла...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!