![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу разобраться с runtime error [D7, WinXP]
plr © (2011-10-12 18:38:00)Самое банальное приложение. Начали возникать 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 с апдейтами всеми, вирусов нет.
han_malign (2011-10-13 08:45:00) [1]
> SetLength(Result, High(arrSource)+1);
проктовазэктомия, блин...
SetLength(Result, Length(arrSource));
и(!)
function setArray( constarrSource : array of byte) : TarrByte;
"cколько ж нам открытий чудных..."(с)А.С.Пушкин
plr (2011-10-12 19:55:00) [2]Вопрос закрыт:
SetLength(Result, High(arrSource) +1);