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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как убрать окно CodeGuard об ошибке 
:(
    Опции темы
dxdash
Дата 25.12.2014, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!

Никогда не имел дела с Borland C++ Builder, и вот озадачили:
Есть программа, скомпилированная в Borland C++ Builder 6. Программа работала на двух практически идентичных компьютерах. На одном из них вышел из строя жёсткий диск. Диск заменили, поставили Windows 2000, Borland C++ Builder 6, скопировали папку с программой из работающей системы.
В результате программа постоянно выкидывает ошибку CodeGuard.

Исходники программы есть, но только более ранней версии. Для проверки запустил их в режиме отладки на обоих системах. На работающей всё заработало, а на второй опять ошибка CodeGuard.

Ошибка связана с неправильным освобождением памяти, но это не критично, т.к. в таком варианте программа работает уже более 10 лет, а программиста, который её писал, никак не найти.

Почему первая система не выдаёт ошибки и как сделать, чтобы и вторая система также её пропускала?
Повторюсь, что актуальных исходников нет, соответственно решение должно быть на уровне системы.

Заранее благодарю.

P.S. Кажется я поторопился и создал тему не в том разделе. Прошу модератора перенести её в соответствующий раздел. Спасибо.

Это сообщение отредактировал(а) dxdash - 25.12.2014, 15:53
PM MAIL   Вверх
Alexeis
Дата 25.12.2014, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



  Отдавать программу с включенным CodeGuard это очень плохая идея. CodeGuard используется для проверки ошибок работы с памятью. При этом скорость работы заметно падает. Например он принудительно заполняет память значениями отличными от нуля. Чтобы убрать ошибки CodeGuard нужно его просто отключить в опциях компилятора С++ Compiler ->Debugging . Его нужно включать только на время. После окончания отладки отключать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dxdash
Дата 25.12.2014, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это всё понятно. А всё таки что можно сделать в сложившейся ситуации?
PM MAIL   Вверх
Alexeis
Дата 26.12.2014, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Цитата(dxdash @  25.12.2014,  21:26 Найти цитируемый пост)
Это всё понятно. А всё таки что можно сделать в сложившейся ситуации? 

Проанализировать текст ошибки. Посмотреть исходный код, место куда указывает CodeGuard. Выяснить является ли ошибка ошибкой или это ложное срабатывание CodeGuard. Этот инструмент часто дает ложные ошибки, а иногда и вовсе влияет на логику программы так что она перестает запускаться.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dxdash
Дата 26.12.2014, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Alexeis @ 26.12.2014,  10:48)
Проанализировать текст ошибки. Посмотреть исходный код, место куда указывает CodeGuard. Выяснить является ли ошибка ошибкой или это ложное срабатывание CodeGuard. Этот инструмент часто дает ложные ошибки, а иногда и вовсе влияет на логику программы так что она перестает запускаться.

Как я писал в первом сообщении - это действительно ошибка:
Код

   SizeBuffer=myCOMSTAT.cbInQue;
   if(SizeBuffer)
   {
    TmpBuf=new u8[SizeBuffer];
    ResetEvent(OverlapStruct.hEvent);
    result=ReadFile(ComPort->ID,TmpBuf,SizeBuffer,&ReadSize,&OverlapStruct);
    if(!result && GetLastError()==ERROR_IO_PENDING)
    {
     result=GetOverlappedResult(ComPort->ID,&OverlapStruct,&ReadSize,true);
     if(!result) PostMessage(ComPort->FormID,COM_ERROR_RX,0,0);
    }
    if(result)
    {
     EnterCriticalSection(&CriticalSection);
     for(u32 i=0; i<SizeBuffer; i++) Buffer.push(TmpBuf[i]);
     LeaveCriticalSection(&CriticalSection);
     PostMessage(ComPort->FormID,COM_DATA_READY,SizeBuffer,0);
    }
    delete TmpBuf;
   }

вместо delete[] TmpBuf;

Задача не в том, чтобы исправить программу (актуальных исходников нет), а в том, чтобы заставить её работать (раньше она работала). Железо (за исключением нового жёсткого диска) и программа на обоих компах одинаковые. Отличия могут быть только в системе (версии DLL-библиотек, реестр или ещё чего).
PM MAIL   Вверх
Alexeis
Дата 26.12.2014, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Цитата(dxdash @  26.12.2014,  13:16 Найти цитируемый пост)
Задача не в том, чтобы исправить программу (актуальных исходников нет), а в том, чтобы заставить её работать (раньше она работала). 

  Я знаю только один правильный способ чтобы заставить ее работать. Это исправить машинные коды, так чтобы освобождение производилось корректно. Все остальные способы это русская рулетка.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xvr
Дата 30.12.2014, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



http://www.backslash.com.au/products/bcb5-...G-CodeGuard.pdf страница 2 внизу (Codeguard configuration tool)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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