C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

стр.: (2) < 1 [2] >
Access violation, при работе с укзателем на данные
** Slader
Отправлено: 14.03.2005, 09:22


Не зарегистрирован







Спасибо.
Еще вопрос. Почему могут возникать исключения при закрытии приложения? Выскакивает "Invalid pointer operation", но ни на какую строку не указывает. Каким образом можно отловить неверный указатель?
Или "Acess Violation at address..." если происходит запись в файл. Но в этом случае ошибка указывается в файле Forms.hpp в строке
CODE

/* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { }

Я так понимаю, что не удалил вручную что-то динамически созданное?
И еще. Если динамически создается фрейм
CODE

TFrame *frm[32];
for (int i=0; i<mode; i++)
   {
      frm[i]= new TFrame(this);
   }
,
то как правильно удалить отдельный фрейм?
Такой код у меня вызывает все тот же "Access violation":
CODE

  delete frm[i];
  frm[i] = NULL;
Rius
Отправлено: 21.03.2005, 21:46


Мастер участка

Группа: Участник
Сообщений: 321



Вопрос к администрации: почему бы не сделать уведомление от первого непрочитанного сообщения, как например на форумах http://forums.overclockers.ru или http://www.progz.ru/forum/index.php? А то узнаю об ответе через неделю, и то из рамблера.

QUOTE
Еще вопрос. Почему могут возникать исключения при закрытии приложения? Выскакивает "Invalid pointer operation", но ни на какую строку не указывает. Каким образом можно отловить неверный указатель?
Или "Acess Violation at address..." если происходит запись в файл

При закрытии программы не удаляется поток.
CODE
__fastcall TrdReadBuf::TrdReadBuf(bool CreateSuspended)
       : TThread(CreateSuspended)
{
FreeOnTerminate=false;
Priority=tpHigher;
}

1. Поставив FreeOnTerminate=false; ты запретил освобождение памяти при прерывании потока.
2. Нигде нет самого вызова метода Terminate();
3. Потоки создаются в void __fastcall TrdReadBuf::Execute(), но не удаляются и не прерываются.
Вывод — неверная работа с потоками.

Удаление фрэймов:
CODE
TFrame *frm[32];//массив
for (int i=0; i<10; i++)
{
 frm[i]= new TFrame(this);//создание
}
delete []frm;//удаление


Вот простенький пример потока

User Attached Image Скачать файл
_06_Threads.rar


стр.: (2) < 1 [2] >
Вернуться в Вопросы программирования в C++Builder