Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriffsverletzung bei Dauertest (https://www.delphipraxis.net/64579-zugriffsverletzung-bei-dauertest.html)

Flips 5. Mär 2006 15:22


Zugriffsverletzung bei Dauertest
 
Hi @ All.

Ich habe einen Algorithmus welcher ca 230 Durchläufe pro Sekunde hat. Allerdings bleibt er so ungefähr bei 15000 Durchläufen mit einer Zugriffsverletzung hängen? Warum?

Delphi-Quellcode:
procedure CompareImages(Image1,Image2:TBitmap);
var P,P2         : PRGBTripleArray;
    i           : integer;
    differents  : integer;
    size        : integer;
    color1,color2:TColor;
begin
differents := 0;
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(zeit1);
P := Image1.ScanLine[Image1.Height-1];
P2 := Image2.ScanLine[Image2.Height-1];
size := Image1.Width*Image1.Height;
for i := 0 to size-1 do
  begin
  color1 := RGBToColor(RGB(P[i].rgbtRed,P[i].rgbtGreen,P[i].rgbtBlue));
  color2 := RGBToColor(RGB(P2[i].rgbtRed,P2[i].rgbtGreen,P2[i].rgbtBlue));

  if color1-color2 <> 0 then
    inc(differents);
  end;

QueryPerformanceCounter(zeit2);
Aufruf Erfolg über einmaliges Aufrufen der Procedure Compare
Delphi-Quellcode:
procedure Compare;
begin
if stopping then
  Exit;

Image2.Picture.Bitmap.FreeImage;
Image2.Picture.Bitmap.LoadFromFile(Listbox1.Items[ListBox1.ItemIndex]);

inc(counter);
Form1.Caption := IntToStr(counter);

CompareImages(Image1.Picture.Bitmap,Image2.Picture.Bitmap);

if ListBox1.ItemIndex = ListBox1.Items.Count-1 then
  ListBox1.ItemIndex := 0;
ListBox1.ItemIndex := ListBox1.ItemIndex +1;
Compare;
end;
Hoffe ihr könnt mir helfen den Fehler zu finden. Vermute das es etwas mit dem Ram zutun hat. Gebe ich die Sachen vll nicht alle wieder frei?

markusj 5. Mär 2006 15:48

Re: Zugriffsverletzung bei Dauertest
 
1. In welcher Zeile bleibt er hängen?
2. Könnte deine Schleifenvariable übergelaufen sein?

mfG

Markus

Flips 5. Mär 2006 16:14

Re: Zugriffsverletzung bei Dauertest
 
Hm...das is ja das Problem. Wenn ich wüsste in welcher Zeile er hängenbleibt...Klar, könnte in jede Zeile einen Breakpoint setzen. Dann aber (Anzahl_der_Zeilen * Anzahl_der_Durchläufe) oft auf Weiter zu klicken ist ein bisschen Zeitaufwändig :P

Zur Schleifenvariable: Es werden immerwieder die selben 10 Bilder durchlaufen. Alle mit einer Größe von 320*240. Sind alle 10 durch fängt es wieder von vorne an. Und da Integerwerte weitaus größer als 76800 (320*240) sein können, schliesse ich das aus.

Trotzdem THX
Weitere Vorschläge?

BenjaminH 5. Mär 2006 16:15

Re: Zugriffsverletzung bei Dauertest
 
Du kannst für Breakpoints doch Bedingungen setzten, (z.B. dass er nur gilt, wenn die Schleife 500 mal durchgelaufen ist oder so) dadurch kannst du da ganze doch eingrenzen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz