Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.065 c
15-1261956446
KilkennyCat
2009-12-28 02:27
2010.03.21
Забавный Уota-сервис


2-1263843087
novichek
2010-01-18 22:31
2010.03.21
canvas.textWidth для разных стилей


4-1217942070
Rafa
2008-08-05 17:14
2010.03.21
Программирование устройства через COM-port


15-1262035823
Юрий
2009-12-29 00:30
2010.03.21
С днем рождения ! 29 декабря 2009 вторник


15-1262278818
qaz
2009-12-31 20:00
2010.03.21
Новогодняя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский