** начинающий |
Отправлено: 30.07.2005, 05:29 |
|
Не зарегистрирован
|
Тут такая вот вещь!
В базу данных вводятся данные через форму. Введя примерно 70-100 раз, прога виснет. Смысл ввода таков: нажал добавить — форма открылась; заполнил, нажал принять — форма закрылась(Close()), обработав введенные данные. Обычно, когда виснет,никаких сообщений нет, просто пикает динамик когда пытешься что-нибудь сделать в программе. А ингда вылазит табло, примерно следующего содержания: Системная ошибка, недостаточно памяти!
Код под открытие формы для ввода данных:
try {
Application->CreateForm(__classid(TfrmP), &frmP);
}
catch (...)
{
ShowMessage("Cann't open form!");
}
try{
frmP->ShowModal();
}__finally{
delete frmP;
}
Может кто-нибудь видет тупость в моем коде из-за чего и виснет прога?
Дело точно в форме, никак не в базе! Проверял! |
|
olegenty |
Отправлено: 30.07.2005, 06:47 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
угу. так не делается.
в auto_ptr оберни, либо делай new/delete
|
|
** начинающий |
Отправлено: 30.07.2005, 11:37 |
|
Не зарегистрирован
|
to olegenty:
Я тебя не совсем понимаю! Если не втягость немного поподробнее можешь? |
|
olegenty |
Отправлено: 30.07.2005, 12:13 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
хорошо, чтобы ты сам всё осознал, включи CodeGuard и пронаблюдай, что и где у тебя не освобождается. ну и диспетчер задач поэксплуатируй.
вообще же, если НЕ собираешься удалять форму, то создавай её посредством Application->CreateForm — тогда Application сам её удалит, когда сочтёт нужным (при разрушении). а если собираешься, то создавай формы посредством new, а разрушай посредством delete.
кроме того, я вообще не считаю целесообразным что-либо создавать/удалять динамически, если оно используется ПОСТОЯННО (70-100 вводов, это уже повод, чтобы форму создать и удалить всего один раз — при создании приложения и при его разрушении, а когда она не нужна — просто скрывать)
|
|
** начинающий |
Отправлено: 30.07.2005, 12:23 |
|
Не зарегистрирован
|
Code Guard — обязательно поруйсь в сети и скачаю! С диспетчером играл — здесь сразу видно дело в форме. CreateForm(): дак я же так и делаю, но у меня видать не удаляется. У меня, код который изложен в первом сообщеннии, повторяется получается 70-100 раз, пока не повиснет прога. Этот код — код под кнопкон. Слушай, ты ведь наверняка знаешь что в моем коде уж точно не полюдски? Я, как начинающий, наверное веселю вас здесь! |
|
** начинающий |
Отправлено: 30.07.2005, 12:37 |
|
Не зарегистрирован
|
Это на начальном этапе исп. программы(ввод данных) форма за сутки открывается раз — 1000. А потом, а и за неделю раз 50 то и не откроется — не потребуется просто. |
|
olegenty |
Отправлено: 30.07.2005, 12:47 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну так опубликуй "код под кнопкой", посмотрим, что у него болит...
|
|
** начинающий |
Отправлено: 30.07.2005, 12:56 |
|
Не зарегистрирован
|
Первое сообщение — в нем есть код, он же код под кнопкой, создающий форму. Вызывается этот код 70-100 раз, пока, как не печально, не повиснет прога.
Когда форма открыта, юзер после ввода данных жмет на кнопку Принять. Нажав на Принять, данные заносятся в таблицу, а потом методом Close() форма закрывается(а я, даже думал убивается).
Сейчас код самой открывающей формыопубликовать не смогу, машина не моя, исходников под рукой просто нет. Да в нем нет ничего мудренного: динамически ничего не создается. |
|
Konstantine |
Отправлено: 01.08.2005, 09:42 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
а зачем создавать/удалять форму?
почему просто не использовать Show/Hide?
|
|
** начинающий |
Отправлено: 01.08.2005, 15:39 |
|
Не зарегистрирован
|
Прсто сейчас на начальном этапе им(пользователям) нужно ввести много данных, а потом это процедура будет очень редкой! По-этому, я бы хотел узнать, как создать форму и удалить ее на х... без ущерба памяти |
|
Vlad |
Отправлено: 01.08.2005, 15:50 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Да не выделывайся ты напиши проще
CODE |
frmP = new TfrmP(Application); // создадим
frmP->ShowModal(); // покажем в модальном режиме
delete frmP; //грохнем на фиг |
|
|
*начинающий |
Отправлено: 02.08.2005, 00:26 |
|
Не зарегистрирован
|
А я и не выделываюсь, просто нечем выделываться — знаний мало!
Вот ты предложил прмер, чем он хуже моего(См. Тему)? Хотя нет разница чуствуется — выходит объекты созданные не по оператору new удалить опером delete никак? Или такая байда только с формой? |
|
vvoid |
Отправлено: 02.08.2005, 12:49 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
Попробуй так (реакция на OnClose твоей формы):
CODE |
void __fastcall TForm1::FormClose (TObject *SenderPtr,
TCloseAction &Action)
{
Action = caFree;
}
|
Удачи!
|
|
Георгий |
Отправлено: 02.08.2005, 20:16 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
если создал что-то с помошью new — удаляй delete
new[] — delete[]
malloc — free
и т.д.
|
|
olegenty |
Отправлено: 03.08.2005, 07:19 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
в некоторых случаях можно не удалять. auto_ptr оченно понравился...
|
|