![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
skrip |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
в файле file.txt есть две строки
ааа ааа ааа ввв ввв ввв не могу разобраться почему без помеченой знаками (!) строчке вторая строка не прибавляется в st, а с ней все работет замечательно.
|
|||
|
||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
надо инициализировать переменную ch в ф-ии read_string (например нулём).
иначе её значение после первого вызова read_string не сбрасывается и остается равным 10 |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
а также добавить условие окончания файла. например
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не согласен ch локальная переменная и после выхода из ф-ии перестает существовать, а при входе заново создается.. Просто компилятор постоянно "глючит" если пытается использовать неинициализированную переменную
|
||||
|
|||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter, согласен ты или не согласен, но при последовательном вызове одной и той же функции с неинициализированными стековыми переменными, значения оных с большой долей вероятности будут сохраняться от предыдущих вызовов.
Добавлено @ 18:31 понятия "перестает существовать" и "заново создается" существуют только в теории. на практике все несколько иначе. |
|||
|
||||
vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
конечно же вероятность существует, только очень призрачная.. Специально проверил ,5 раз вызывад ф-ю и не разу она не повторил значение переменной которым была проин. переменная внутри ф-ии!!!Неиниц. переменная помещается в регистр ,а не вынемается из него так что вероятность очень мала ![]() Слышали про такое понятие "Время жизни переменной"??
Конечно же разработчики компиляторов подлые лгуны, а книги пишут полные ламеры ![]()
не раскажете как?? Это сообщение отредактировал(а) vinter - 9.8.2006, 19:17 |
||||||
|
|||||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
стековая память для переменной не обнуляется, изменяется только указатель стека а для объектоа классов компилятором генерируется вызов деструктора в месте выхода его за область видимости в данном случае происходит
то есть сами данные неизменны, изменяется SP, значение ch сохраняется при втором вызове так что baronp прав Добавлено @ 20:28
в случае с POD-типами - просто изменение SP и контроль за использованием вне области видимости на этапе компиляции в случае с объектами - вызов деструктора -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
А стек тут причем??? неинициализированная переменная помещается не в стек , А в РЕГИСТР
|
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
где написано? а тут
регистров не хватит ![]() объекты тоже в регистры засовывать? ![]() Это сообщение отредактировал(а) MAKCim - 9.8.2006, 20:38 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Мы же говорим о конкретном примере.. Оптимизтрующий компилятор при обьявлении одной переменной скорее всего положит ее в регистр(для экономии времени).Не ну если много тогда конечно в стек...Но мы то имеем всего одну переменную...
А это что такое(просто не знаю)? |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
спорный вопрос все-таки...
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter, как бы это так помягче-то?... в общем, ты высказал немало утверждений(причем зачастую излишне эмоционально, да еще и сразу в двух темах), которые с действительностью никак не пересекаются.
это зависит от компилятора, параметров компиляции, от того, как переменная используется, какого она типа, модели вызова функции итд итп. а если уж речь зашла о конкретном случае, то компилятор никогда не "соптимизирует" переменную ch в регистр, ибо как-то так сложилось, что в качестве буфера для приема данных регистры не используются. |
|||
|
||||
vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
dumb мы на "ты" не переходили
![]() почитайте вот это
можно узнать откуда такие сведения(для собственного просвещения)
где это? то что я назвал "инициализацией " немного другой процесс(что то я нигде не встречал стандарта по названиям), многие даже именитые авторы книг по программированию называют разными словами одинаковые вещи?? в сущности я не был неправ... |
||||
|
|||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
vinter,
Прикрепи сюда ассемблерный листинг этой программы твоего компилятора, тогда и спорам конец. |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
вот есть кусок кода:
попробуйте посмотрите при отладке значение переменной...у меня оно ни разу не установилось в 10 при опред. без инициализации |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
vinter, где тут видно что
записывает в сегмент данных адрес куда указывает ch неизвестен (может быть он стековый) а сама ch в сегменте данных -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
На сколько я помню если в скобках не указаны [bp] или [sp] по умолчанию префиксом ставится сегмент данных...отсюда и мои выводы
|
|||
|
||||
dumb |
|
||||||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter,
[off]мне никуда переходить не надо - так принято в сети. но если Вы настаиваете... имейте ввиду: тон такого общения считается "напряженным", а "выкающий" собеседник выдает в себе высокомерие, либо агрессивный настрой, даже если на самом деле это не так.[/off] попробуйте еще раз перечитать предложение и подумать над его смыслом.
везде - все Ваши предложения, описывающие работу компилятора или организацию данных, содержат как терминологические, так и смысловые ошибки. когда именитые авторы вводят свои понятия, они ими четко смысл передают. итак, человек, который пытается доказывать "призрачные вероятности", используя при этом Debug версию, отправляет меня читать Как пережить release-версию!
занавес!
чтобы не было таких "непоняток", переменные надо называть bp и sp. ![]() а память хорошая. даже слишком. мы уже давно живем в 32-битном мире. пытаемся даже на 64 переползти... ![]() ps. даа... такое количество букв вредно как для физического здоровья пишущего, так и для психического - читающего. ![]() pss. да... обижать никого не хотел, если вышло едковато, уж простите - сами такой импульс дали. ![]() |
||||||||
|
|||||||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
likehood |
|
||||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Для такого кода
g++ выдал одно "левое" число и четыре десятки. |
||||
|
|||||
vinter |
|
||||||||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
OK
никак.. прочитал статью там так написано..
а тебе прочитать тяжело было?? Там как раз и написано про оптимизацию!
я как раз и доказывал отсутствие данной верятности!
![]() dumb а вообще было бы просто замечательно если бы ты приводил бы еще какие нибудь факты к своим высказываниям..
Visual c++ 6.0,VS 2003 .NET и BC 3.1 все выдали постороннее значение ![]() |
||||||||||||
|
|||||||||||||
Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
Но одно и тоже, исключая первое ![]() Добавлено @ 10:06 Во...
-------------------- Теперь при чем :P |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
у меня во всех случаях -858993460 при Debug и 1 при Release
с cout'ом в bc 3.1 так же как у baronp Это сообщение отредактировал(а) vinter - 11.8.2006, 10:44 |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter,
читать, то что пишут, надо, а не комментировать. ты постоянно аппелируешь к результатам, которые тебе выдает debug версия проекта. а в той статье как-раз написано про проблемы, возникающие при переходе от дебага к релизу. одной из них и посвящен этот топик - неинициализированные переменные. тут читай внимательно: debug версия собирается с ключами, заставляющими компилятор генерировать код, заполняющий выделенное под переменные место определенными значениями. инициализирует он все переменные значением 0xCC, дабы проще было ловить оставленные без инициализации. в release версии нет этого кода! - в переменных содержится мусор, который остался от работы других переменных, адресов возврата, параметров функций итд - все, что помещается в стэк(мы говорим о локальных переменных) твое -858993460 и есть 0xCCCCCCCC. собери уже наконец release версию любого из приведенных здесь исходников. Добавлено @ 10:53 пока писал, похоже, произошло чудо... ![]() |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
dumb а сразу не мог аргументировать свои ответы...Всем спасибо что просветили
![]() |
|||
|
||||
Dragon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 10.8.2006 Где: Киев Репутация: нет Всего: нет |
Ну, вообще-то по стандарту использование неинициализированной переменной leads to undefined behavior. И это грубая ошибка. И даже если какой-то компилятор будет стабильно создавать ch в той же ячейке памяти, то все это делать определенно не будут - что сделает программу непортируемой и зависимой от типа/версии компилятора.
Плюс, действительно некоторые компиляторы, вроде msvc действительно инициализируют все неинициализированные переменные 0 при Debug сборке ![]() Это сообщение отредактировал(а) Dragon - 11.8.2006, 12:29 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |