Текущий архив: 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