Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с release версией ! CString.Format() вызывает краш проги (( 
V
    Опции темы
DigitSphinx
Дата 25.5.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



При запуске проги возникает ошибка (обнаружена ошибка. Приложение будет закыто …) я нажимаю на (отладка) , запускается Visual Studio 2005 и открывает мне код с Break Point’ом на этой строке :
Код

str.Format(_T("%d"), int’овская переменная );

str объявленна как CString str;
в Debug все отл. Работает !
в чем может быть проблема ?
сорри что не в том разделе !

Это сообщение отредактировал(а) DigitSphinx - 25.5.2007, 22:23


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
Hurricane
Дата 25.5.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



Так вот навскидку не скажу, что именно не так.

Разница между Debug и Release в том, что в Debug все объявленные переменные инициализирутся нулями, а в Release - нет, в них будет находится какой-то мусор. Проверь, есть ли где-то неинициализированные переменные.


PM MAIL   Вверх
DigitSphinx
Дата 26.5.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



Все разобрался !, проблема была в int’овской переменной !
Но теперь я вообще офигел , как в Debug’е работало .
Потому что переменная берется с указателя 
Код

str.Format(_T("%d"), SHeap[i].SHEET->ParentSegment->ParentTask->TaskNum);
 
при запуске этот указатель пустой,
(в конструкторе явно указанно) 
Код

SHeap[i].SHEET = NULL;

По этому и вылизала ошибка типа “Access violation”.
а в дебаге он игнорирует ошибку и работает по алгоритму , т.е. фигня !
P.S. Надо поразбираться !
Спасибо Hurricane, может в дебаге и работало потому что он инициализирует переменные нулями !


Это сообщение отредактировал(а) DigitSphinx - 26.5.2007, 00:36


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
Ln78
Дата 26.5.2007, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Hurricane @  25.5.2007,  23:40 Найти цитируемый пост)
Разница между Debug и Release в том, что в Debug все объявленные переменные инициализирутся нулями

В данном случае это непринципиально, но всё же уточню - не нулями, а фиксированными значениями, чередующимися парами нулей и единиц. Например, для целой переменной это значение 0xCCCCCCCC
PM MAIL   Вверх
dumb
Дата 26.5.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(Ln78 @  26.5.2007,  04:16 Найти цитируемый пост)
не нулями, а фиксированными значениями, чередующимися парами нулей и единиц. Например, для целой переменной это значение 0xCCCCCCCC

то, что значение CC представляет из себя в бинарном виде "11001100", в данном случае не имеет никакого значения. все неинициализированные данные и "охранные зоны" забиваются CC для того, чтобы в случае перехода выполнения на данные, сразу сработало отладочное исключение - int 3, опкод которого и есть CC. smile
PM MAIL   Вверх
Любитель
Дата 28.5.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



[немного_оффтоп]
Цитата(dumb @  26.5.2007,  11:56 Найти цитируемый пост)
для того, чтобы в случае перехода выполнения на данные

А не проще это сделать через атрибуты секций? Да и вообще очень специфичная ситуация. Разумней было бы забивать данными, более осмысленными с точки зрения данных, а не кода. ИМХО, конечно.
[/немного_оффтоп]


--------------------
PM MAIL ICQ Skype   Вверх
dumb
Дата 28.5.2007, 04:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(Любитель @  28.5.2007,  00:59 Найти цитируемый пост)
А не проще это сделать через атрибуты секций?

smile не совсем понял о каких секциях речь - если о PE, то стек, например, не сопоставляется ни с какими секциями. а основным препятствием является невозможность назначения "правильного" набора атрибутов ввиду их инклюзивности(до появления DEP): PAGE_READONLY и PAGE_READWRITE разрешает выполнение, PAGE_EXECUTE - чтение(к рассматриваемому моменту не относится). т.е. до появления DEP запретить выполнять данные было невозможно.

Цитата(Любитель @  28.5.2007,  00:59 Найти цитируемый пост)
Разумней было бы забивать данными, более осмысленными с точки зрения данных, а не кода.

более осмысленные с точки зрения данных значения(типа 0 или -1) могут скрывать ошибки "неинициализированности", с чем, собственно, и боремся... smile а так(CC) - сразу двух зайцев: и отладочное исключение в случае выполнения, и "достаточно мусорное" значение для неинициализированных переменных.
PM MAIL   Вверх
Любитель
Дата 28.5.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(dumb @  28.5.2007,  04:41 Найти цитируемый пост)
до появления DEP

Ну, во-первых DEP существует уже давно. Во-вторых, я в принципе не пойму - будет выброшено int 3 при нашей зверской (и так часто встречающейся smile ) попытке выполнения кода локальной переменной. Мы разве сможем что-то толком понять.?

Цитата(dumb @  28.5.2007,  04:41 Найти цитируемый пост)
огут скрывать ошибки "неинициализированности", с чем, собственно, и боремся

Юлин, а я думал наоборот. Хотя, конечно, такое объяснение гораздо логичнее smile Только тогда получается, что (в целом) дебаг должен работать хуже релиза smile Если мы непроинитили нашу переменную, которая легла на место старой, заиниченной и нормально юзаемой в свое время переменной, то, вероятно (не более того, конечно), что в релизе там будет осмысленное значение и может с ним прога сработает. В дебаге же всегда будут одни це-це-це...

Почему же на релиз обычно больше ругаются? smile Хотя, если честно у меня почему-то или работает и то, и то (я даже не про VC++ - а вообще). Или не работает ничего. За исключением очень исключительных случаев, когда очень агрессивная оптимизация чтой-то ломала. Но у меня такое было буквально несколько раз. И то при выяснении (ради любопытства) обычно находился в bug notes компилера подобный случай.


--------------------
PM MAIL ICQ Skype   Вверх
Hurricane
Дата 28.5.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



Цитата(Любитель @  27.5.2007,  23:39 Найти цитируемый пост)
Юлин, а я думал наоборот. Хотя, конечно, такое объяснение гораздо логичнее  Только тогда получается, что (в целом) дебаг должен работать хуже релиза  Если мы непроинитили нашу переменную, которая легла на место старой, заиниченной и нормально юзаемой в свое время переменной, то, вероятно (не более того, конечно), что в релизе там будет осмысленное значение и может с ним прога сработает. В дебаге же всегда будут одни це-це-це...

Кстати - да, логично. Но почему-то больше запомнились случаи, когда дебаг еще кое-как хромал, а релиз вываливался по эксепшну. Или это просто психологический эффект?

Пытаюсь сообразить, почему я написал про инициализацию нулями. Ничего в голову не приходит  smile  Конечно же, что там не нули (ну, скажем, вперемешку с единичками  smile ).

PM MAIL   Вверх
nickless
Дата 28.5.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



В дебаге по другому расположены переменные в памяти, между ними может быть место для дебажных переменных итд, а в релизе включается оптимизация на полную, переменные сдвигаются поближе, меняются местами и небольшие вылезы за пределы массивов становятся гораздо заметнее  smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
dumb
Дата 29.5.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(nickless @  28.5.2007,  16:20 Найти цитируемый пост)
в релизе ... небольшие вылезы за пределы массивов становятся гораздо заметнее

в дебаге между переменными кладутся "охранные зоны", которые проверяются при выходе из области видимости объявленных переменных: если будет выход за пределы, отладчик будет "ругаться" - заметнее, imho, некуда... smile

ps. надо отметить, что все вышесказанное относится к стековым переменным. глобальные заполняются нулями, а члены классов динамически выделенная память - значением CD. почему CD - х3, видимо, надо было как-то отделять мух от котлет...  smile

Это сообщение отредактировал(а) dumb - 30.5.2007, 11:54
PM MAIL   Вверх
Любитель
Дата 2.6.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



dumb, эти CD, CC - это конкретно к VC++ относится? Я сомневаюсь, что все компилеры следуют столь интуитивно понятным правилам  smile 


--------------------
PM MAIL ICQ Skype   Вверх
dumb
Дата 2.6.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(Любитель @  2.6.2007,  12:37 Найти цитируемый пост)
эти CD, CC - это конкретно к VC++ относится?

smile тема вроде как именно о VC и была...

Цитата(Любитель @  2.6.2007,  12:37 Найти цитируемый пост)
Я сомневаюсь, что все компилеры следуют столь интуитивно понятным правилам

а я даже не сомневаюсь в том, что они этого не делают. smile других компилеров, делающих такого рода "заполнение", я даже не видел...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.