| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > ошибка access violation |
| Автор: gl42 18.11.2011, 01:42 |
| Добрый вечер. Раз через раз вылазит ошибка (при том, что код не меняется). Access violation at ... adresss. Read of adress. Либо при нажатии "сохранить проект" либо при компиляции. при том что нажимаешь ок, и дальше работает. нигде уже в запущенной программе больше она не проявляется. Как тогда узнать в чем проблема, если она вылазит переодически и почти все время с одним и тем же адрессом? Может это баг какой то? Кто то сталкивался с этим? Также при комплияции проекта тоже иногда происходит ошибка Error RLINK32: error opening file “unit....dfm”. Опять же запустишь снова и все норм. |
| Автор: Keeper89 18.11.2011, 04:07 |
| Да, это баг. Баг в коде. А код надо предъявить в студию. |
| Автор: gl42 18.11.2011, 13:05 | ||
| Самые обычные функции win api. тут участки кода примерно после которых начали появляться те ошибки. Везде используется ListView (стиль-таблица). предварительно свойства Columns у них заполнено и первый столбец тоже.
Очищать память для локальных переменных типа строк выделенной SetLength я так понимаю не нужно? |
| Автор: Keeper89 18.11.2011, 15:38 |
| Что-то я тут ничего для AV не вижу |
| Автор: gl42 18.11.2011, 15:51 |
вот и я тоже. я ж говорю, она появляется периодически. как ее ловить, если в программе она не дает о себе знать? все работает безошибочно. еще один участок кода вот в теме http://forum.vingrad.ru/act-ST/f-84/t-341030.html там работа с реестром. но там тоже ничего проблемного на вид нет: объект создан, в конце ключ закрыт и память очищена. |
| Автор: Keeper89 18.11.2011, 17:57 |
| Можно поставить madExpert и посмотреть подробный лог ошибки. |
| Автор: gl42 18.11.2011, 18:10 |
если верить статье www.webdelphi.ru/2011/09/opyt-raboty-s-madexcept/ то для того чтобы проверить ошибку этим madExpert надо вызвать исключение. но у меня в работающей программе не вылезет никаких ошибок. даже search->find error не доступно когда вылазит av. |
| Автор: Keeper89 18.11.2011, 18:40 |
| Ну она же выскакивает из под отладчика? |
| Автор: gl42 18.11.2011, 18:49 |
по идее, да. но если нажать ок, и еще раз скомпилить то отладчик ее пропускает. но программа то сама по себе из-за нее не вылетает. |
| Автор: northener 18.11.2011, 20:34 |
| Рекомендую http://www.eurekalog.com/downloads_delphi.php Trial version can be used to evaluate EurekaLog before buying. EurekaLog Trial is fully-functional version, except your projects will expire after 30 days. За 30 дней ошибку наверняка можно будет найти. P.S. Эврика контролирует не только вашу программу, но и Делфи. |
| Автор: Keeper89 18.11.2011, 23:23 |
| northener, madExpert тоже Делфи контролирует |
| Автор: gl42 18.11.2011, 23:35 |
| Появляется также ошибка AV в модуле rtl70.bpl( |
| Автор: northener 18.11.2011, 23:53 |
Эт да. Хорошее решение - купить Эврику! Тем более, что SingleUser лицензия практически бесплатная! Спорить не собираюсь. Про madExpert просто ничего не знаю, в отличие от Эврики. Но по Эврике наши дельфийские форумы всегда помогут получить поддержку от всем нам известного мастера. (На всех 4-х мне известных форумах он зарегистрирован и по мере возможности участвует). Добавлено через 6 минут и 59 секунд Скорее всего виноваты в этой ошибке какие-то сторонние компоненты/эксперты. Какие? А вот тут вам поможет Эврика или любые другие подобные инструменты. Если вы не хотите использовать готовые инструменты, тогда вам к http://sourceforge.net/search/?q=JEDI |
| Автор: gl42 19.11.2011, 00:07 | ||
Возможно, появилась когда стала сейчас использовать WMI. код в теме forum.vingrad.ru/forum/topic-341311.html |
| Автор: northener 19.11.2011, 00:26 |
А кто тут "она"? Ваша программа? Ещё раз предложу вам использовать готовые инструменты для поиска причин ошибок! |
| Автор: gl42 19.11.2011, 00:50 |
| ошибка AV в модуле rtl70.bpl Вы настойчивы.) Ок. Не объясните, как пользоваться вашей "эврикой"? |
| Автор: Lols 19.11.2011, 01:47 |
| У меня при аналогичной ошибке Эврика ничего не выявила... |
| Автор: Keeper89 19.11.2011, 01:56 | ||||
gl42, насчет WMI. Попробуйте заменить
на
|
| Автор: gl42 19.11.2011, 02:04 | ||
я вывожу в memo. без переводов. и тип же ProductName - string. |
| Автор: northener 19.11.2011, 02:15 | ||
Ну во-первых. Эврика не моя. Но я её использую. И она мне много где помогла. Как пользоваться? Просто скачать и установить! В суппорт Эврики обращались? |
| Автор: Keeper89 19.11.2011, 02:41 |
Как выводите, покажите |
| Автор: gl42 19.11.2011, 02:51 | ||
|
| Автор: northener 19.11.2011, 09:06 | ||
Вот http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1392 всё максимально подробно описано. Кстати. По поводу AV рекомендую прочитать http://www.gunsmoker.ru/2010/03/blog-post.html Пардон. Я имел в виду http://www.gunsmoker.ru/2009/05/access-violation.html. Но это к лучшему! Будет время - прочитайте обе статьи. Очень полезно! |
| Автор: Keeper89 19.11.2011, 09:51 |
| gl42, в своем же коде измените вывод на VarToStr. |
| Автор: gl42 19.11.2011, 11:24 | ||
эти две статьи прочитала еще до того как обратиться на форум. Добавлено через 40 секунд Это изменит что-нибудь?) |
| Автор: Keeper89 19.11.2011, 12:46 |
| gl42, это правильнее. А изменит или нет - посмотрите |
| Автор: gl42 19.11.2011, 13:02 |
| Keeper89, ок но ошибкам это не помогло) |
| Автор: northener 19.11.2011, 13:05 |
Тогда я не пойму ваше нежелание использовать готовые инструменты для поиска причины AV! Ведь AV - это самая плохая бяка! Любое исключение - либо оно есть, либо его нет. Кроме AV. Его присутствие означает, что есть ошибка работы с памятью. Его отсутствие не означает ровным счётом ничего! |
| Автор: gl42 19.11.2011, 13:24 | ||
Я установила EurekaLog, посмотрела видеоурок, прочла первую ссылку. но мне все равно не совсем понятно как она ловит AV если она появляется 1) периодически, 2) не в рабочей программе, а всего лишь иногда при сохранении проекта либо при отладке программы 3) при чем единожды (то есть при следующем нажатии Build'a она больше не появляется). в запущенном проекте никаких исключений не возникает. |
| Автор: northener 19.11.2011, 13:29 | ||
А какая вам разница как она ловит? Когда AV возникнет, тогда Эврика его поймает и выдаст эльфа. Вот тогда и спрашивайте, если что не поймёте. |
| Автор: gl42 19.11.2011, 13:35 | ||
"Для включения EurekaLog в своих проектах нужно выбрать меню "Project"/"EurekaLog options". И отметить галочку "Activate EurekaLog". При этом модифицируются файлы настроек проекта, и в uses DPR файла добавляется модуль ExceptionLog — основной модуль EurekaLog. Собственно, это всё, что нужно сделать, чтобы включить поддержку баг-отчётов в своей программе." - то есть на этом все? Добавлено через 1 минуту Перекомпилить заново проект? и просмотреть отчет? |
| Автор: northener 19.11.2011, 13:44 | ||
Ну если я правильно понял, то что вы сообщили о вашей проблеме, то даже этого вам не нужно. Достаточно того, что вы установили Эврику! Но лучше всего галку поставить. После решения проблемы галку можно будет снять. А Эврику удалить. Хотя я бы посоветовал её купить. |
| Автор: gl42 19.11.2011, 13:49 | ||
Ну если так, то отчета никакого нет и сообщений об ошибках тоже. |
| Автор: northener 19.11.2011, 13:54 |
Эврика это не волшебная палочка, а инструмент. Продолжайте работать над своим проектом. Как только ошибка вновь появится будет и сообщение, будет и подробный отчёт! |
| Автор: gl42 19.11.2011, 13:57 |
с ваших предыдущих слов, мне как раз так и показалось) =D |
| Автор: northener 19.11.2011, 15:45 |
Дык Эврика очень хороший инструмент! Почти как волшебная палочка. Только нужно уметь ею грамотно пользоваться. |
| Автор: Akella 19.11.2011, 20:39 | ||
gl42, а что тебя отталкивает от того, чтобы привести полный и точный текст ошибки с самого начала?
|
| Автор: gl42 19.11.2011, 21:59 |
| Akella, Вы про полный код? я не вижу смысла. остальные участки кода делались уже после появления ошибки. Добавлено через 3 минуты и 21 секунду если про саму ошибку : Access Violation at adress 6F427075.Read of adress 6F427075. |
| Автор: northener 19.11.2011, 23:21 | ||
Я тоже за полное цитирование сообщения об ошибке в вопросе на форуме. Но в данном случае, если верить автору (а не верить оснований нет) ошибка возникает не в программе автора, а в IDE Дельфи. А в этом случае сообщение об ошибке нам мало что даёт. Нужно разворачивать стек вызовов и внимательно его смотреть. Скорее всего ошибка возникает из-за какого-то кривого стороннего компонента/библиотеки (или эксперта, но это менее вероятно. Кривые эксперты всё-таки большая редкость |
| Автор: Akella 19.11.2011, 23:58 |
мда... ты даже текст вопроса не можешь прочитать или понять.... Добавлено @ 00:07 gl42, ты задумывался или читал ли о том, почему возникает Access Violation? Access Violation чаще всего возникает, когда приложение лезет в чужую область памяти, недоступную, твоему приложению. Ты бы хоть взял да перевёл: Access Violation. Ну если лень, то вот тебе перевод: нарушение доступа Например, ты не создал некий объект, но обращаешься к нему, к ещё несозданному объекту, для которого ещё не выделена память. Получаешь по рукам от операционной системы. Когда ты обращаешься к ещё несозданному объекту, то значение Read of adress будет примерно такое: 000000000 Может быть не выделил память для массива или чего-то ещё. В твоём случае ты вообще лезешь не весть куда А теперь скажи, ты отладчиком смотрел код во время исполнения приложения? В какой строке вываливается исключение? Возможно ты не выделил память, либо выделил недостаточно. |
| Автор: gl42 20.11.2011, 00:08 |
о так может вы еще перейдете на оскорбления? |
| Автор: Akella 20.11.2011, 00:10 | ||||
Возможно, что исключение возникает где-то в недрах WinAPI. Да, код не меняется, но данные в функции WinAPI могут передаваться разные или вообще не передаваться. Добавлено через 43 секунды
к сожалению этого я позволить себе не могу |
| Автор: northener 20.11.2011, 00:13 |
Остынь, пожалуйста! И перечитай всю ветку заново! |
| Автор: gl42 20.11.2011, 00:37 | ||||
Поверьте, читала, задумывалась и переводила. не сразу же мне писать на форум "спасите, помогите". Вы увидели в коде что я лезу куда то куда не надо?
Если я выделила бы памяти не достаточно, разве в рабочей программе исключение бы не вылезло? ни в какой строке исключение не вываливается. программа работает без ошибок, выводит то, что нужно. более часто сообщение вылазило при сохранении проекта и не ссылалось ни на какую строчку. по шагово выполняла отладку программы. сегодня пришлось переустановить делфи, пока никаких ошибок не вылазит. Добавлено @ 00:37 а вам бы очень хотелось? |
| Автор: northener 20.11.2011, 02:42 |
Сурово! Может не стоило так "рубить с плеча"? Лучше б разобраться. |
| Автор: gl42 20.11.2011, 11:05 | ||
Вы не поняли, мне пришлось переустановить не из-за этой ошибки) |
| Автор: Akella 20.11.2011, 11:49 |
| Зачем тогда в этой теме было писать про переустановку? Конечно же многие именно так и поняли. |
| Автор: CodeMonkey 20.11.2011, 12:50 | ||||||
Хочу обратить внимание отвечающих на (цитирую):
Откуда следует, что проблема НЕ в коде, а в самой Delphi. Откуда, опять же, следует, что код программы тут ни при чём. Все советы что-то поменять в коде - мимо кассы. Поздравляю "внимательных" товарищей. Что реально нужно было делать: 1. Взять другой дистрибутив Delphi (может проблема в битой пиратке). 2. Ещё лучше - новую версию Delphi (скажем, Delphi XE). 3. Накатить патчи на IDE. Для Delphi 7 это Update 1. 4. Накатить обновления для системы. 5. Попробовать установить всякие неофициальные патчи вроде IDE Fix Pack/Delphi SpeedUp. 6. Удалить все сторонние эксперты или компоненты. 7. Отключить антивирус и аналогичные программы, могущие вмешиваться в процесс работы IDE. 8. Чистая переустановка Delphi с удалением настроек из реестра и папок на диске. 9. Чистая переустановка системы. 10. Если не помогло - запустить Delphi из под самой Delphi и отлаживать отладчиком ошибку (можно угрохать кучу времени с нулевым результатом). Или... просто терпеть. Добавлено @ 12:53
В EurekaLog ловля ошибок в самой IDE по умолчанию выключена и включается отдельной настройкой в опциях. |
| Автор: gl42 20.11.2011, 13:28 | ||
CodeMonkey,
ну у меня стоит сборка delphi7 lite full edition v7.3.4.3 и там помоему достаточно этого стороннего) на другом компьютере имеется стандартный delphi7 enterprise и при первой комплияции проекта ошибка Error RLINK32: error opening file “unit....dfm” так и вылазит. это попробую. |
| Автор: CodeMonkey 20.11.2011, 13:44 |
| Можно ещё попробовать пересоздать форму (dfm). Может в ней какая-то проблема. |
| Автор: Akella 20.11.2011, 14:31 |
Что это за зверь? На Винграде запрещено обсуждение вареза! |
| Автор: Akella 20.11.2011, 19:00 | ||
Извини, я просто не знал, что у вас атрофировано чувство юмора |
| Автор: gl42 21.11.2011, 00:34 | ||
Решила пока заново создать проект. На форму добавила ListView, поставить стиль таблицей, заполнила Columns и Items, поменяла индексы у каждого узла с -1 на 0, 1, 2.. Честно, сначала думала, что это индексы каждого узла. Теперь поняла, что тупость сделала. Если это индексы иконок для узлов, и я их поменяла - то этом и могла быть ошибка..( При попытке сохранить проект вылезла ошибка Access violation at adress 4003328D in module 'rtl70.bpl'. Read of address 00000011. |
| Автор: Dik0n 21.11.2011, 02:19 | ||
Улыбнуло Скорее всего дело в левой редакции, надо делать как CodeMonkey советует
|
| Автор: Akella 21.11.2011, 12:50 |
| Да, в первую очередь использовать нормальный, обычный дистрибутив со всеми обновлениями, + эти можно поставить: http://forum.vingrad.ru/forum/topic-249441.html |
| Автор: Keeper89 21.11.2011, 14:19 |
| Осталось ссылку на этот "нормальный" дистрибутив кинуть |
| Автор: Akella 21.11.2011, 15:24 |
| http://ibase.ru/prices/embarcadero.htm |