Главная страница
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.005 c
6-1269966380
ZeTToG350
2010-03-30 20:26
2013.11.17
Определение MAC


15-1366819476
Космополит
2013-04-24 20:04
2013.11.17
Skype работает, а интернет нет.


15-1370184813
Eraser
2013-06-02 18:53
2013.11.17
Panel и fade эффект


2-1360495510
Максим
2013-02-10 15:25
2013.11.17
Базы данных


15-1370076915
Пит
2013-06-01 12:55
2013.11.17
В чём сложность поддержки большого проекта?