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

Вниз

Invalid pointer operation   Найти похожие ветки 

 
pazitiff ©   (2010-01-22 02:29) [0]

Сообщение о ошибке с текстом Invalid pointer operation выскакивает после выполнения программы. Программа делает медианную фильтрацию- устраняете шум изображений, размер каретки устанавливаю я (нюанс метода фильтрации), при этом использую динамические массивы, до этого каретка в фильтрации была 3х3 и массивы были статические ошибки не было. Прошу подсказать почему выскакивает ошибка.  
Вот полностью главный юнит
http://depositfiles.com/files/ivq005c7g
http://4ppl.ru/162538

Вот сама программа
http://4ppl.ru/162539

Ниже код процедуры самой фильтрации
procedure TMainForm.Filter1Click(Sender: TObject);
var
i,j,k,l,r,q,g,b,w,ser:integer;
t:boolean;
vecr:array  of integer;
br:array of array of integer;
can:byte;
begin
setlength (vecr,si*si);
setlength (br,si,si);
if fl1 then
pb.Min:=0;
     pb.Max:=bmp.Width-1;
     pb.Position:=0;
begin
 for i:=0 to paintbox.Width-2 do
 begin
   for j:=0 to paintbox.Width-2 do
   begin
     for k:=0 to si-1 do        // обнуление массиовов
     begin
       for l:=0 to si-1 do
       begin
         br[k,l]:=0;
       end;
     end;
     for k:=0 to si-1 do           // Расчёт значения каждого канала в маске
     begin
       for l:=0 to si-1 do
         begin
           can:=paintbox.Canvas.Pixels[i+k,j+l];
           r:=getrvalue(can);
           g:=getgvalue(can);
           b:=getbvalue(can);
           br[k,l]:=trunc(sqrt(r*r+g*g+b*b));
         end;

     end;
     q:=0;
     for k:=0 to si-1 do         // переписываем полученные значения каналов
     begin                    // в маске, в вектор для последующей их сортировки
       for l:=0 to si-1 do
       begin
         q:=q+1;
         vecr[q]:=br[k,l];
       end;
     end;
     t :=true;
     while t do
     begin
       t:=false;
       for k:=1 to si*si-1 do            //метод пузырька
       begin
         if vecr[k]>vecr[k+1] then
           begin
             w:=vecr[k];
             vecr[k]:=vecr[k+1];
             vecr[k+1]:=w;
             t:=true;
           end;
       end;
     end;
     ser:=(trunc((si*si)/2))+1;
     paintbox1.Canvas.Pixels[i+1,j+1]:=rgb(vecr[ser],vecr[ser],vecr[ser]);
     pb.Position:=pb.Position+1;
 end;
end;
end;


понимаю что чужой код смотреть ни кому не горит желанием. Но буду рад любой помощи или совету. Заранее спасибо


 
Игорь Шевченко ©   (2010-01-22 02:42) [1]


> Сообщение о ошибке с текстом Invalid pointer operation выскакивает
> после выполнения программы


после выполнения программы или процедуры ?

Если программы, то где-то остался мусор в глобальной переменной или какой-то объект был освобожден по Free и не обнулен, и кто-то его выполнить Free еще раз.

FastMM или MemProof такое поведение неплохо диагностируют.


 
MBo ©   (2010-01-22 05:19) [2]

setlength (vecr,si*si);
...
for k:=1 to si*si-1 do    
..
vecr[k]:=vecr[k+1];
vecr[k+1]:=w;      

здесь идет обращение за пределы массива


 
Anatoly Podgoretsky ©   (2010-01-22 09:05) [3]

> pazitiff  (22.01.2010 02:29:00)  [0]

Включи проверку диапзонов и переполнений.



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

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

Наверх




Память: 0.47 MB
Время: 0.01 c
1-1244700380
leonidus
2009-06-11 10:06
2010.03.21
Окно распахивающееся с анимацией


11-1214116630
Trejder
2008-06-22 10:37
2010.03.21
Delphi + KOL = WinCE?


2-1263711881
MK26
2010-01-17 10:04
2010.03.21
Помогите установить пароль на готовую уже программу (exe фаил)


6-1214573401
Галинка
2008-06-27 17:30
2010.03.21
как передать строку в сокет?


4-1228827942
Alex_C
2008-12-09 16:05
2010.03.21
Открытие COM-порта при использовании переходника USB-COM