Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка access violation 
:(
    Опции темы
gl42
Дата 18.11.2011, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Добрый вечер.
Раз через раз вылазит ошибка (при том, что код не меняется). Access violation at ... adresss. Read of adress. Либо при нажатии "сохранить проект" либо при компиляции. при том что нажимаешь ок, и дальше работает. нигде уже в запущенной программе больше она не проявляется. 
Как тогда узнать в чем проблема, если она вылазит переодически и почти все время с одним и тем же адрессом? Может это баг какой то? Кто то сталкивался с этим?
Также при комплияции проекта тоже иногда происходит ошибка Error RLINK32: error opening file “unit....dfm”. Опять же запустишь снова и все норм.

PM MAIL   Вверх
Keeper89
Дата 18.11.2011, 04:07 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Да, это баг. Баг в коде. А код надо предъявить в студию. 


--------------------
PM MAIL WWW   Вверх
gl42
Дата 18.11.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Самые обычные функции win api. 
 тут участки кода  примерно после которых начали появляться те ошибки.
Везде используется ListView (стиль-таблица). предварительно свойства Columns у них заполнено и первый столбец тоже.
Код

type
    TMemoryStatusEx = record
    dwLength: DWORD;
    dwMemoryLoad: DWORD;
    ullTotalPhys: int64;
    ullAvailPhys: Int64;
    ullTotalPageFile: Int64;
    ullAvailPageFile: Int64;
    ullTotalVirtual: Int64;
    ullAvailVirtual: Int64;
    ullAvailExtendedVirtual: Int64;
  end;

procedure GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx);
stdcall;
external kernel32 name 'GlobalMemoryStatusEx';

procedure TForm1.Button_ComputerClick(Sender: TObject);
var
len: cardinal;
buffer: string;
begin
len:=MAX_COMPUTERNAME_LENGTH+1;
SetLength(buffer, len);
if GetComputerName(PChar(buffer),len) then
ListView2.Items.Item[0].SubItems.Insert(0, copy(buffer,1,len));
len:=MAX_COMPUTERNAME_LENGTH+1;
SetLength(buffer, len);
if GetUserName(PChar(buffer),len) then
ListView2.Items.Item[1].SubItems.Insert(0, copy(buffer,1,len))
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  batFlags: string;
  status: TSystemPowerStatus;
begin
ZeroMemory(@(status), SizeOf(status));   // пример функции GetSystemPowerStatus брался из книги
//но смущает это обнуление..не знаю ли нужно оно
if GetSystemPowerStatus(status) then
begin
// подключение к сети
case status.ACLineStatus of
0: ListView4.Items.Item[0].SubItems.Insert(0, 'отключен');
1: ListView4.Items.Item[0].SubItems.Insert(0, 'подключен');
else  ListView4.Items.Item[0].SubItems.Insert(0, 'неизвестно') ;
end;
// уровень заряда батарее
case  status.BatteryFlag of
0: batFlags:='средний';            
1: batFlags:='высокий';         
2: batFlags:='низкий';             
4: batFlags:='критический';   
8: batFlags:='заряжается';      
128: batFlags:='батарея отсутствует';
else batFlags:='неизвестно';
end;
ListView4.Items.Item[1].SubItems.Insert(0, batFlags);
end
else
messageDlg('не выходит получить инфу о питании компьютера', MtError,[mbOK],0);
//(остаток заряда батареи %)
if status.BatteryLifePercent=255 then
ListView4.Items.Item[2].SubItems.Insert(0, 'Неизвестно')
else
begin
ListView4.Items.Item[2].SubItems.Insert(0, IntToStr(status.BatteryLifePercent)+'%');
ProgressBar_Battery.Position:=status.BatteryLifePercent; // полоса батареи
end;
// оставшееся время работы
if Integer(status.BatteryLifeTime)<>-1 then
  ListView4.Items.Item[3].SubItems.Insert(0, TimeToStr(status.BatteryLifeTime/SecsPerDay))
else
 ListView4.Items.Item[3].SubItems.Insert(0, 'неизвестно');
end;

procedure TForm1.Button_OMemoryClick(Sender: TObject);
var
  memStat: TMemoryStatusEx;
begin
ZeroMemory(@(memStat), SizeOf(memStat));  //хз опять же надо ли?
memStat.dwLength:=SizeOf(memStat);
// загруженность оперативной памяти
GlobalMemoryStatusEx(memStat);
ProgressBar_Memory.Position:=memStat.dwMemoryLoad;
// оперативная память
ListView3.Items.Item[0].SubItems.Insert(0, IntToStr(memStat.ullTotalPhys div 1048576)) ;
ListView3.Items.Item[1].SubItems.Insert(0, IntToStr(memStat.ullAvailPhys div 1048576)) ;
end;

end.


Очищать память для локальных переменных типа строк выделенной SetLength я так понимаю не нужно?

Это сообщение отредактировал(а) gl42 - 18.11.2011, 13:08
PM MAIL   Вверх
Keeper89
Дата 18.11.2011, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Что-то я тут ничего для AV не вижу  smile 


--------------------
PM MAIL WWW   Вверх
gl42
Дата 18.11.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Цитата(Keeper89 @  18.11.2011,  15:38 Найти цитируемый пост)
Что-то я тут ничего для AV не вижу    


 вот и я тоже. я ж говорю, она появляется периодически. как ее ловить, если в программе она не дает о себе знать? все работает безошибочно.
еще один участок кода вот в теме
http://forum.vingrad.ru/act-ST/f-84/t-341030.html
там работа с реестром. но там тоже ничего проблемного на вид нет: объект создан, в конце ключ закрыт и память очищена.


PM MAIL   Вверх
Keeper89
Дата 18.11.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Можно поставить madExpert и посмотреть подробный лог ошибки.


--------------------
PM MAIL WWW   Вверх
gl42
Дата 18.11.2011, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Цитата(Keeper89 @  18.11.2011,  17:57 Найти цитируемый пост)
Можно поставить madExpert и посмотреть подробный лог ошибки. 


если верить статье www.webdelphi.ru/2011/09/opyt-raboty-s-madexcept/ то для того чтобы проверить ошибку этим madExpert надо вызвать исключение. но у меня в работающей программе не вылезет никаких ошибок. 
даже search->find error не доступно когда вылазит av. 
PM MAIL   Вверх
Keeper89
Дата 18.11.2011, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Ну она же выскакивает из под отладчика?


--------------------
PM MAIL WWW   Вверх
gl42
Дата 18.11.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Цитата(Keeper89 @  18.11.2011,  18:40 Найти цитируемый пост)
Ну она же выскакивает из под отладчика? 

по идее, да. но если нажать ок, и еще раз скомпилить то отладчик ее пропускает. 
но программа то сама по себе из-за нее не вылетает.

PM MAIL   Вверх
northener
Дата 18.11.2011, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Рекомендую Эврику
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. Эврика контролирует не только вашу программу, но и Делфи.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
gl42
Дата 18.11.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Цитата(northener @  18.11.2011,  20:34 Найти цитируемый пост)
Рекомендую Эврику
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. Эврика контролирует не только вашу программу, но и Делфи. 

спасибо, но я не думаю что это хороший вариант решения.)
PM MAIL   Вверх
Keeper89
Дата 18.11.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



northener, madExpert тоже Делфи контролирует


--------------------
PM MAIL WWW   Вверх
gl42
Дата 18.11.2011, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Появляется также ошибка AV в модуле rtl70.bpl(
PM MAIL   Вверх
northener
Дата 18.11.2011, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(gl42 @  18.11.2011,  21:20 Найти цитируемый пост)
спасибо, но я не думаю что это хороший вариант решения.) 

Эт да. Хорошее решение - купить Эврику! Тем более, что SingleUser лицензия практически бесплатная!

Цитата(Keeper89 @  18.11.2011,  23:23 Найти цитируемый пост)
northener, madExpert тоже Делфи контролирует 

Спорить не собираюсь. Про madExpert просто ничего не знаю, в отличие от Эврики. Но по Эврике наши дельфийские форумы всегда помогут получить поддержку от всем нам известного мастера. (На всех 4-х мне известных форумах он зарегистрирован и по мере возможности участвует).

Добавлено через 6 минут и 59 секунд
Цитата(gl42 @  18.11.2011,  23:35 Найти цитируемый пост)
Появляется также ошибка AV в модуле rtl70.bpl

Скорее всего виноваты в этой ошибке какие-то сторонние компоненты/эксперты.
Какие? 
А вот тут вам поможет Эврика или любые другие подобные инструменты. Если вы не хотите использовать готовые инструменты, тогда вам к Джедаям


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
gl42
Дата 19.11.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.11.2011

Репутация: нет
Всего: нет



Цитата(northener @  18.11.2011,  23:53 Найти цитируемый пост)
Скорее всего виноваты в этой ошибке какие-то сторонние компоненты/эксперты.

Возможно, появилась когда стала сейчас использовать WMI.

код в теме forum.vingrad.ru/forum/topic-341311.html

Это сообщение отредактировал(а) gl42 - 19.11.2011, 00:26
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.