![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятное изменение значения переменной
Вова © (2012-12-23 08:18:00)Есть функция
function DrawKontur(var QP: TQuickPixels; QPStart: TQuickPixels;
x, y: integer): Boolean;
var
Pixel1: Cardinal;
Intensity: byte;
matr: array [1 .. 3, 1 .. 3] of byte;
i, j, x1, y1, x2, y2, x0, y0: integer;
begin
DrawKontur := true; // пока не используется и всегда истина.
if (x=0) or (y = 0) or (x = (QP.Width-1)) or (y = (QP.Height-1)) then
exit;// на границах не считаем
for i := (y - 1) to (y + 1) do
begin
for j := (x - 1) to (x + 1) do
begin
if (j < 0) or (j > (QP.Width-1)) or (i < 0) or (i > (QP.Height-1)) then
begin
continue;
end;
x2 := (j - (x - 1));
y2 := (i - (y - 1));
x1 := ((j -(x - 1))-1);
y1 := (i - (y - 1));
Pixel1 := QPStart.GetPixels24(j, i);
Intensity := getIntensity(Pixel1);
matr[x2, y2] := Intensity;
if x2 = 0 then
continue;
end;
end;
end;
которую я пытаюсь заставить работать, но наткнулся на полтергейст: при входе в функцию с x = 1 и y = 1 (ну то есть при первом же заходе, при котором мы попадаем в цикл). Заходим в цикл и в первом проходе имеем i = 0, но после выполнения matr[x2, y2] := Intensity; i вдруг становится равной 16711680, эта цифра напоминает значение переменной Pixel1 = 16777215 (Intensity = 255, x2=0,y2=0), а вопрос заключается в том что: КАК? и ПОЧЕМУ? и что делать?
Embarcadero RAD Studio XE, window 7 x64
Dimka Maslov (2012-12-23 11:45:00) [1]Включи проверку индекса массива и будет счастье.
Вова (2012-12-23 09:46:00) [2]matr: array [0 .. 2, 0 .. 2] of byte; да, оказывается дело в тос как объявлять массив.....
MBo (2012-12-23 09:42:00) [3]Индекс y2 (к примеру) уже на первом шаге становится 0, и matr[x2, y2] портит воздух за пределами матрицы
Со включенной опцией проверки диапазонов это можно было бы отловить сразу.
P.S. Внутренний if не нужен