Ошибка "Debug Assertion Failed"
От: Аноним  
Дата: 01.07.05 22:45
Оценка:
Выскакивает такая ошибка при выполнении DEBUG-версии программы. При работе с RELEASE-версии ошибок не возникает. Программа работает с БД через DAO.
В чем может быть причина этой ошибки?
Re: Ошибка "Debug Assertion Failed"
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.07.05 05:00
Оценка: 16 (1)
Здравствуйте, <Аноним>, Вы писали:

А> Выскакивает такая ошибка при выполнении DEBUG-версии программы. При работе с RELEASE-версии ошибок не возникает. Программа работает с БД через DAO.

А> В чем может быть причина этой ошибки?

там должно быть написано и номер строки в исходниках указан
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[2]: Ошибка "Debug Assertion Failed"
От: Аноним  
Дата: 02.07.05 07:31
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, <Аноним>, Вы писали:


А>> Выскакивает такая ошибка при выполнении DEBUG-версии программы. При работе с RELEASE-версии ошибок не возникает. Программа работает с БД через DAO.

А>> В чем может быть причина этой ошибки?

OE>там должно быть написано и номер строки в исходниках указан

Да, написано:
При запуске выскакивают 12 поворябщихся сообщений
— afxwin1.inl Line 22
— olevar.cpp Line 2197
— afxwin1.inl Line 22
— olevar.cpp Line 2197
— afxwin1.inl Line 22
— olevar.cpp Line 2197
— afxwin1.inl Line 22
— olevar.cpp Line 2197
— afxwin1.inl Line 22
— olevar.cpp Line 2197
— afxwin1.inl Line 22
— olevar.cpp Line 2197
При попытке добавить строку в БД выскакивают 2 сообщения
— dbgHeap.c Line 1017. Expression _BLOCK_TYPE_IS_VALID(pHeap->nBlockUse)
— второе соощение ссылается ан мой модуль .exe. Выводится DAMAGE: before Ignore block (#196611) at 0x00AE22AB

Во всех сообщениях написано, что посмотреть причины, по которым может произойти Assertion failure можно посмотреть в документации по Assert VC++.
У меня с английским плохо, поэтому поздскажите плиз что это за Assertion Failure?
Что вообще такое Assertion? Это как-нибудь связано с макросами ASSERT и ASSERT_VALID? Зачем они вообще нужны?
Re[3]: Ошибка "Debug Assertion Failed"
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.07.05 15:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Во всех сообщениях написано, что посмотреть причины, по которым может произойти Assertion failure можно посмотреть в документации по Assert VC++.

А> У меня с английским плохо, поэтому поздскажите плиз что это за Assertion Failure?
А> Что вообще такое Assertion? Это как-нибудь связано с макросами ASSERT и ASSERT_VALID? Зачем они вообще нужны?

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

ASSERT(afxCurrentInstanceHandle != NULL);

если ты подорвался на этом месте, значит применяешь библиотеку не так, как расчитывал автор, надо разбираться, почему у тебя afxCurrentInstanceHandle == NULL

Начни с сгенеренного мастером каркаса, добавляй свой код, пока не проявится ASSERT, если не въедешь сам, приводи этот код для разборок.
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[4]: Ошибка "Debug Assertion Failed"
От: Аноним  
Дата: 02.07.05 16:34
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, <Аноним>, Вы писали:


А>> Во всех сообщениях написано, что посмотреть причины, по которым может произойти Assertion failure можно посмотреть в документации по Assert VC++.

А>> У меня с английским плохо, поэтому поздскажите плиз что это за Assertion Failure?
А>> Что вообще такое Assertion? Это как-нибудь связано с макросами ASSERT и ASSERT_VALID? Зачем они вообще нужны?

OE>авторы библиотечных функций вставляют в свои функции проверки неких обязательных условий, без которых выполнение функции не имеет смысла, типа


OE>
OE>ASSERT(afxCurrentInstanceHandle != NULL);
OE>

OE>если ты подорвался на этом месте, значит применяешь библиотеку не так, как расчитывал автор, надо разбираться, почему у тебя afxCurrentInstanceHandle == NULL

OE>Начни с сгенеренного мастером каркаса, добавляй свой код, пока не проявится ASSERT, если не въедешь сам, приводи этот код для разборок.

Вся фишка в том, что я не пользовался мастером. Я просто в своем проекте (не сгенеренный MFC-Wizard, а написанный ручками с явным указанием основного цикла выборки сообщения, и.т.д) в настройках указал, что нужно использовать MFC как статическую библиотеку, а затем просто пользовался классами CDaoDatabse, CDaoRecordset, и.т.д.
Например, для добавления строки использвался код типа
CDaoDatabase db;
db.Open(dbName,FALSE,FALSE,CString(dbLangGeneral)+_T(dbPasswordPWD));

   CDaoTableDef    dbTableDef(&db);
   dbTableDef.Open(tableName);

      CDaoRecordset    dbRecord(&db);
      dbRecord.Open(&dbTableDef);

         dbRecord.AddNew();

      dbRecord.Close();

   dbTableDef.Close();

db.Close();

И где здесь нужно вставлять ASSERT-ы (или ASSERT_VALID-ы)?
Re[5]: Ошибка "Debug Assertion Failed"
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.07.05 17:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Вся фишка в том, что я не пользовался мастером. Я просто в своем проекте (не сгенеренный MFC-Wizard, а написанный ручками с явным указанием основного цикла выборки сообщения, и.т.д) в настройках указал, что нужно использовать MFC как статическую библиотеку, а затем просто пользовался классами CDaoDatabse, CDaoRecordset, и.т.д.


так "просто" использовать классы из MFC не получится. Если твоя цель — работающая программа — сгенери каркас мастером, посмотри что там и как и добавь свой код, если проводишь исследования на тему mfc-классы в не-mfc проекте — флаг в руки.

А> Например, для добавления строки использвался код типа

А>
А>CDaoDatabase db;
А>db.Open(dbName,FALSE,FALSE,CString(dbLangGeneral)+_T(dbPasswordPWD));

А>   CDaoTableDef    dbTableDef(&db);
А>   dbTableDef.Open(tableName);

А>      CDaoRecordset    dbRecord(&db);
А>      dbRecord.Open(&dbTableDef);

А>         dbRecord.AddNew();

А>      dbRecord.Close();

А>   dbTableDef.Close();

А>db.Close();
А>

А> И где здесь нужно вставлять ASSERT-ы (или ASSERT_VALID-ы)?

это философский вопрос, про смысл ASSERT-ов я уже писал.
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[3]: Ошибка "Debug Assertion Failed"
От: Amidlokos Россия  
Дата: 03.07.05 09:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Во всех сообщениях написано, что посмотреть причины, по которым может произойти Assertion failure можно посмотреть в документации по Assert VC++.

А> У меня с английским плохо, поэтому поздскажите плиз что это за Assertion Failure?
А> Что вообще такое Assertion? Это как-нибудь связано с макросами ASSERT и ASSERT_VALID? Зачем они вообще нужны?

Связано напрямую.

Грубо говоря: проверка некоторого критического условия в дебажной версии. Корректность переменной (у тебя там по первому assert-у хэндл нулевой) и т.п. Из релиза всё внутри ASSERT() удаляется, поэтому в релизе assertion failure случиться не может.

Смотри исходники.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[3]: Ошибка "Debug Assertion Failed"
От: d-e-n  
Дата: 03.07.05 13:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Odi$$ey, Вы писали:

А>...
А>При попытке добавить строку в БД выскакивают 2 сообщения
А> — dbgHeap.c Line 1017. Expression _BLOCK_TYPE_IS_VALID(pHeap->nBlockUse)
А> — второе соощение ссылается ан мой модуль .exe. Выводится DAMAGE: before Ignore block (#196611) at 0x00AE22AB

Может я и не прав, но проверьте, не переполняется ли у вас где-нибудь буфер в куче?

По крайней мере, у меня лично строчка вида

- dbgHeap.c Line 1017. Expression _BLOCK_TYPE_IS_VALID(pHeap->nBlockUse)

вызывает именно такие мысли.

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.