Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Abnormal program termination

33K
21 августа 2009 года
Posix86749
54 / / 13.07.2009
Есть программа. Суть ее такова.
Берет текстовый файл, из него извлекает данные, неким образом изменяет и помещает в базу Access.
Если огрнииться только работой с текстовым файлом, то все нормально - езвлекает, модифицирует и т.д. но если начать работать с БД (создание, уделание таблиц, добавление строк в таблицы, выбор из таблиц, удаление строк из таблиц) то вроде тоже все нормально, все работает. но когда закрываю приложение вылетает ошибка Windows. А потом окошко с сообщением "Abnormal program termination".
Подскажите в чем проблема может быть? или все таки надо еще код показать?
9
21 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: Posix86749
... или все таки надо еще код показать?


Сам то, как думаешь?

33K
21 августа 2009 года
Posix86749
54 / / 13.07.2009
в этом файле я привел код кнопки, после нажатия которой происходит вышеописанная ситуация. Где косяк, не пойму. И главное ведь срабатывает все нормально, а когда приложение закрываешь появляется ошибка
14
21 августа 2009 года
Phodopus
3.3K / / 19.06.2008
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там. Совсем изредка - несбалансированность стека, но такие ляпы сделать куда труднее.
33K
21 августа 2009 года
Posix86749
54 / / 13.07.2009
Цитата: Phodopus
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там. Совсем изредка - несбалансированность стека, но такие ляпы сделать куда труднее.



А мне-то чего делать теперь? как с этим бороться?

33K
26 августа 2009 года
Posix86749
54 / / 13.07.2009
Посмотрел отладку во время этой ошибки-
там вот что написано:
Код:
.
.
.
ntdll.DbgBreakPoint:       (1)
7c90120E int 3              (2)
7c90120F ret                (3)
7c901210 mov edi, edi    (4)
ntdll.DbgUserBreakPoint:  (5)
.
.
.

и ругань собственно на строчку (3).
Помогите пожалйста!!!! Это трындец какой-то!!!!
1.9K
26 августа 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: Phodopus
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там.


Согласен, встречал такую штуку, причем вся подлость в том, что ошибка вылетает именно при выходе из функции, и потом фиг найдешь где накосячил...

Цитата: Posix86749
А мне-то чего делать теперь? как с этим бороться?
...
Посмотрел отладку во время этой ошибки-
там вот что написано:


Искать неправильную работу с памятью, причем, имхо, не стоит спускаться на уровень ассемблера: ret - это возврат из функции, и ошибка здесь следствие более ранней ошибки.

1.9K
26 августа 2009 года
GreenRiver
451 / / 20.07.2008
Хороший кандидат на косяк:
Код:
char *char_time1, *char_time2;
 char_time1=new char[8];
 char_time2=new char[8];
 *char_time1=NULL;
 *char_time2=NULL;
...
   time1="";
    time2="";
   StrLCopy(char_time1,(ADOQuery1->FieldByName("Connect_Time")->AsString).c_str(),8);
   StrLCopy(char_time2,(ADOQuery1->FieldByName("Setup_Time")->AsString).c_str(),8);
...
    for(int i=0;i<8;i++)
      {
        time1=time1+char_time1;
        time2=time2+char_time2;
      }
...
  delete []char_time1;
  delete []char_time2;

Некоторых телодвижений вообще не понял... String религия не позволяет использовать?

UPD: похожая проблема (мораль всей басни в последнем сообщении)
33K
27 августа 2009 года
Posix86749
54 / / 13.07.2009
Цитата: GreenRiver
Хороший кандидат на косяк:
Код:
char *char_time1, *char_time2;
 char_time1=new char[8];
 char_time2=new char[8];
 *char_time1=NULL;
 *char_time2=NULL;
...
   time1="";
    time2="";
   StrLCopy(char_time1,(ADOQuery1->FieldByName("Connect_Time")->AsString).c_str(),8);
   StrLCopy(char_time2,(ADOQuery1->FieldByName("Setup_Time")->AsString).c_str(),8);
...
    for(int i=0;i<8;i++)
      {
        time1=time1+char_time1;
        time2=time2+char_time2;
      }
...
  delete []char_time1;
  delete []char_time2;

Некоторых телодвижений вообще не понял... String религия не позволяет использовать?


Я тут пересмотрел код и понял что Вы правы.
в результате переработки получилось так:

 
Код:
time1="";
    time2="";
    time1=ADOQuery1->FieldByName("Connect_Time")->AsString.SubString(0,8);
    time2=ADOQuery1->FieldByName("Disc_Time")->AsString.SubString(0,8);

код получился значительно короче, а главное ошибка исчезла!!!! Спасибо!!! ну и в репутацию плюс человеку:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог