Название: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Caduceus от Декабрь 29, 2011, 09:47 Вопрос конечно не по поводу QtCreator-а, но все же инстурментарий. Юзаю QtCreator с MSVC компилером. Так вот - программа заходит в ветки условий, которые не выполняются. Причем это не только по шагам в дебаге (можно было бы на ошибку дебагера списать), но и в рантайме - он туда заходит. Например, указатель точно не равен NULL, но он НЕ заходит в if (ptr), или список точно пустой, то он заходит в if (!list.isEmpty())
Что это такое может быть? У меня в хидере одной моей библиотеки стоит pragma (pack 1) - только на это думаю. Может быть из-за этого? Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: popper от Декабрь 29, 2011, 10:15 Посмотри, вылетает ли программа на Q_ASSERT
Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Caduceus от Декабрь 29, 2011, 10:20 Так да, вылетает после захождения в ненужные ветки. Например, список пуст, он игнорирует это условие. Заходит в него и так size() списка выдает какой-то мусор - огромное число. Он заходит в цикл по элементам списка и падает выдает Ассерт на первом же обращении к элементу. Почему в size мусор - не понимаю
Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: andrew.k от Декабрь 29, 2011, 10:30 Обычно такое происходит в пятницу вечером, а тут четверг утро. Странно)
Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: b-s-a от Декабрь 29, 2011, 15:48 Так да, вылетает после захождения в ненужные ветки. Например, список пуст, он игнорирует это условие. Заходит в него и так size() списка выдает какой-то мусор - огромное число. Он заходит в цикл по элементам списка и падает выдает Ассерт на первом же обращении к элементу. Почему в size мусор - не понимаю типичное поведение программы из-за повреждения памяти. Ищи, возможно, где-то ты пишешь за пределы массива или работаешь с удаленным объектом.Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Igors от Декабрь 29, 2011, 17:17 но и в рантайме - он туда заходит. Например, указатель точно не равен NULL, но он НЕ заходит в if (ptr), или список точно пустой, то он заходит в if (!list.isEmpty()) 1) Rebuild All, возможно исходники не соответствуют коду. Ну или глянуть код в asm 2) печатаем напр Код Ничего особо фантастичного нет, напр другая нитка может изменить ptr уже после того как if выполнился. Но сначала надо попечатать Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Rem Norton от Январь 03, 2012, 21:34 Был у меня похожий случай. Один сотрудник 2 дня ломал мозг себе и выносил окружающим потому, что:
Код
Может следует взглянуть на код повнимательнее? Ну или поискать в проекте строчку типа: Код
А вообще не вредно код к вопросу прилагать. Чертовски ускоряет поиск решения. Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: alexman от Январь 03, 2012, 21:49 Код
Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Rem Norton от Январь 03, 2012, 22:34 Ну вообще то это какбе классика, на грани бояна. ;D
Название: Re: Какая-то фигня - компилер заходит в ветки условий, которые false Отправлено: Akon от Январь 03, 2012, 22:49 Цитировать типичное поведение программы из-за повреждения памяти. Ищи, возможно, где-то ты пишешь за пределы массива или работаешь с удаленным объектом. +1В MSVC дебаге есть возможность поставить бряк на изменение содержимого по заданному адресу (т.н. аппаратная точка останова). Ставьте бряк на адрес памяти, по которой вычисляется size(). |