Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.17;
Скачать: CL | DM;

Вниз

Не могу разобраться с runtime error   Найти похожие ветки 

 
plr   (2011-10-12 18:38) [0]

Самое банальное приложение. Начали возникать runtime error.

Имеем вспомогательную функцию:


type
 TarrByte = array of byte;

var
 PP: array[00..$FF] of TarrByte;

...

function setArray(arrSource : array of const) : TarrByte;
var
 i: Integer;

begin
   SetLength(Result, High(arrSource));

   for i := Low(arrSource) to High(arrSource) do
     Result[i] := arrSource[i].VInteger;
end;


Определил в каком участке кода:


// собака роется тут
 PP[X] := setArray([$02, $55, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $56]);


Причём таких присвоений много (15 штук), привёл одно для примера.

X - проверяется на range checking.

Теперь главное.

Если я делаю эти присвоения в FromCreate, то у меня на одном из них возникает ошибка и приложение не стартует:

---------------------------
Debugger Fault Notification
---------------------------
Project Z:\ZZZ.exe faulted with message: "access violation at 0x00407168: write of address 0x00030cf0". Process Stopped. Use Step or Run to continue.

Если я блок с присвоениями выношу в отдельную процедуру и запускаю ее вручную по кнопке, то ошибки никакой не возникает. Но при выходе из приложения (закрытие формы) возникает другая ошибка:

---------------------------
Debugger Exception Notification
---------------------------
Project ZZZ.exe raised exception class EInvalidPointer with message "Invalid pointer operation". Process stopped. Use Step or Run to continue.

Соответственно, если блок кода с присвоениями не выполняется - приложение не падает ни на каком этапе.

Debug не ловит строчку кода в какой ошибка происходит, например, ставлю break point на первой строчке FormClose(), пробую двигаться шагами, дохожу до "end." в dpr и получаю runtime error с выводом CPU.

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

Что я делаю не так? В чём причина? Как можно избежать runtime error?

Delphi 7.3.4.2, win-xp с апдейтами всеми, вирусов нет.


 
plr   (2011-10-12 19:55) [1]

Вопрос закрыт:


SetLength(Result, High(arrSource)+1);


 
han_malign   (2011-10-13 08:45) [2]


> SetLength(Result, High(arrSource)+1);

проктовазэктомия, блин...
SetLength(Result, Length(arrSource));
и(!)
function setArray(const arrSource : array of byte) : TarrByte;

"cколько ж нам открытий чудных..."(с)А.С.Пушкин



Страницы: 1 вся ветка

Текущий архив: 2013.11.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
15-1369859366
NailMan
2013-05-30 00:29
2013.11.17
Прикалываемся тут с коллегами на работе


1-1318238199
Istrafiloff
2011-10-10 13:16
2013.11.17
TMainMenu. Проблемы.


2-1360753929
ddadda
2013-02-13 15:12
2013.11.17
LoadJPGFile из TFastDIB


15-1367290964
mk26
2013-04-30 07:02
2013.11.17
Win 8


6-1269966380
ZeTToG350
2010-03-30 20:26
2013.11.17
Определение MAC