![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как бороться с Access violation? [D7, WinXP]
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]
> Нужно зармеить код из-за которого это происходит
Ошибки надо исправлять, а не заремливать.