Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как бороться с Access violation? [D7, WinXP]


Страницы:   1 2 3

cvg ©   (2004-11-11 10:49:00) 

Hi All! Subj. Прога иногда затыкакется, выкидывая сообщения такого вот типа: "Project abc.exe raised exception class EAccessViolation with message 'Access violation at address 00401C7A in module 'abc.exe'. Process stopped. Use stop or Run to continue." И как же с этим делом бороться?


REA   (2004-11-11 12:19:00) [21]

В "экзюшнике" все дело...


Семен Сорокин   (2004-11-11 12:18:00) [22]


> cvg   (11.11.04 12:06) [26]
> Ну так вот она и остановилась на сторочке
>
>  n.prev := p;
>
> И что мне с ней делать?

А про Call Stack Вы слышали?


cvg   (2004-11-11 12:06:00) [23]

Ну так вот она и остановилась на сторочке

 n.prev := p;

И что мне с ней делать?


Digitman   (2004-11-11 11:57:00) [24]


> cvg   (11.11.04 11:39) [23]



> выкидывая сообщения такого вот типа: "Project abc.exe raised
> exception class EAccessViolation with message 'Access violation
> at address 00401C7A in module 'abc.exe'


вот эта самое "00401C7A" и "abc.exe" - это не для Пушкина, это для тебя инф-ция !

это - фрагмент Справки :

Choose Search|Find Error to display the Find Error dialog box.

Find Error dialog box

Use this dialog box to specify the addressof the most recent runtime error.

Error Address
The address of the most recent runtime error and the error number appears in the runtime error report if it is available.

When you click OK, Delphi recompiles your program and stops at the address location you entered, highlighting the line that caused the runtime error.

the address- та самая галиматья "00401C7A"


Amoeba   (2004-11-11 11:48:00) [25]


> cvg   (11.11.04 11:39) [23]
> Ну дак в том и вопрос: в котором именно (или хотя бы примерно)
> месте ее искать?

Тебе уже сказали, что все телепаты в бессрочном отпуске. А ошибка у тебя в 17-й строке.
Если хочешь дождаться ответа, то выкладывай собственныйкод, поскольку нечего на зеркало пенять...


cvg   (2004-11-11 11:39:00) [26]

Ну дак в том и вопрос: в котором именно (или хотя бы примерно) месте ее искать?


Amoeba   (2004-11-11 11:36:00) [27]


> cvg   (11.11.04 11:21) [21]

В таком случае ищи ошибку не у Borland'а, а в своем собственном коде.


cvg   (2004-11-11 11:21:00) [28]

Плохишу: Заголовок у этого модуля:


{ *********************************************************************** }
{                                                                         }
{ Delphi Runtime Library                                                  }
{                                                                         }
{ Copyright (c) 1996,2001 Borland Software Corporation                    }
{                                                                         }
{ *********************************************************************** }


TUser   (2004-11-11 11:21:00) [29]

Мне уже интересно - как GetMem.inc дебажить?


cvg   (2004-11-11 11:19:00) [30]


const
 cAlign        = 4;
 cThisUsedFlag = 2;
 cPrevFreeFlag = 1;
 cFillerFlag   = Integer($80000000);
 cFlags        = cThisUsedFlag or cPrevFreeFlag or cFillerFlag;
 cSmallSize    = 4*1024;
 cDecommitMin  = 15*1024;


Плохиш   (2004-11-11 11:18:00) [31]

>Amoeba ©   (11.11.04 11:15) [16]

Интелектуальную собственность воруем? ;-)


cvg   (2004-11-11 11:17:00) [32]


type
 TSmallTab    = array [sizeof(TFree) div cAlign .. cSmallSize div cAlign] of PFree;


Amoeba   (2004-11-11 11:15:00) [33]

А теперь, пожалуйста, еще и описание переменной smallTabв студию.


ЮЮ   (2004-11-11 11:14:00) [34]

n := f.next;
если f.next = nil, то и n будет nil, поэтому на строке
n.prev := p
AV просто обязано быть


Плохиш   (2004-11-11 11:13:00) [35]

f.next = nil!


cvg   (2004-11-11 11:11:00) [36]


type
 PFree = ^TFree;
 TFree = packed record
   prev: PFree;
   next: PFree;
   size: Integer;
 end;
 PUsed = ^TUsed;
 TUsed = packed record
   sizeFlags: Integer;
 end;


Amoeba   (2004-11-11 11:07:00) [37]

A где описание типа PFree и глобальных переменных? Опять заставляешь гадать?


cvg   (2004-11-11 11:04:00) [38]

Вот процедура целиком, где это происходит (насколько я понимаю, стандартная, потому что основу проги писал не я):

procedure DeleteFree(f: PFree);
var
 n, p: PFree;
 size: Integer;
begin
 if rover = f then
   rover := f.next;
 n := f.next;
 size := f.size;
 if size <= cSmallSize then begin
   if n = f then
     smallTab[size div cAlign] := nil
   else begin
     smallTab[size div cAlign] := n;
     p := f.prev;
     n.prev := p;
     p.next := n;
   end;
 end else begin
   p := f.prev;
   n.prev := p;
   p.next := n;
 end;
end;


Amoeba   (2004-11-11 11:04:00) [39]


> cvg   (11.11.04 11:01) [7]
> В файле GETMEM.INC останавливается на второй строчке из
> нижеприведенных:
>
>    p := f.prev;
>    n.prev := p;
>    p.next := n;

Ну и что с того? Телепатов и мастеров гадания на кофейной гуще здесь нет. Просим в студию КОД, а не его абсолютоно неинформативный огрызок.


Amoeba   (2004-11-11 11:01:00) [40]


> Ddd-01   (11.11.04 10:59) [4]
> Нужно зармеить код из-за которого это происходит

Ошибки надо исправлять, а не заремливать.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо