.
.
.
ntdll.DbgBreakPoint: (1)
7c90120E int 3 (2)
7c90120F ret (3)
7c901210 mov edi, edi (4)
ntdll.DbgUserBreakPoint: (5)
.
.
.
Abnormal program termination
Берет текстовый файл, из него извлекает данные, неким образом изменяет и помещает в базу Access.
Если огрнииться только работой с текстовым файлом, то все нормально - езвлекает, модифицирует и т.д. но если начать работать с БД (создание, уделание таблиц, добавление строк в таблицы, выбор из таблиц, удаление строк из таблиц) то вроде тоже все нормально, все работает. но когда закрываю приложение вылетает ошибка Windows. А потом окошко с сообщением "Abnormal program termination".
Подскажите в чем проблема может быть? или все таки надо еще код показать?
Цитата: Posix86749
... или все таки надо еще код показать?
Сам то, как думаешь?
в этом файле я привел код кнопки, после нажатия которой происходит вышеописанная ситуация. Где косяк, не пойму. И главное ведь срабатывает все нормально, а когда приложение закрываешь появляется ошибка
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там. Совсем изредка - несбалансированность стека, но такие ляпы сделать куда труднее.
Цитата: Phodopus
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там. Совсем изредка - несбалансированность стека, но такие ляпы сделать куда труднее.
А мне-то чего делать теперь? как с этим бороться?
там вот что написано:
Код:
и ругань собственно на строчку (3).
Помогите пожалйста!!!! Это трындец какой-то!!!!
Цитата: Phodopus
В борландовской линейке это часто обусловлено освобождением "не той" памяти, не того объекта. И не обязательно это сделать при завершении, а проявится там.
Согласен, встречал такую штуку, причем вся подлость в том, что ошибка вылетает именно при выходе из функции, и потом фиг найдешь где накосячил...
Цитата: Posix86749
А мне-то чего делать теперь? как с этим бороться?
...
Посмотрел отладку во время этой ошибки-
там вот что написано:
...
Посмотрел отладку во время этой ошибки-
там вот что написано:
Искать неправильную работу с памятью, причем, имхо, не стоит спускаться на уровень ассемблера: ret - это возврат из функции, и ошибка здесь следствие более ранней ошибки.
Код:
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;
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: похожая проблема (мораль всей басни в последнем сообщении)
Цитата: GreenRiver
Хороший кандидат на косяк:
Некоторых телодвижений вообще не понял... String религия не позволяет использовать?
Код:
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;
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);
time2="";
time1=ADOQuery1->FieldByName("Connect_Time")->AsString.SubString(0,8);
time2=ADOQuery1->FieldByName("Disc_Time")->AsString.SubString(0,8);
код получился значительно короче, а главное ошибка исчезла!!!! Спасибо!!! ну и в репутацию плюс человеку:)