** 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;//удаление
|
Вот простенький пример потока
|
|
|