![]() |
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:
Aufruf Erfolg über einmaliges Aufrufen der Procedure Compare
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);
Delphi-Quellcode:
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?
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; |
Re: Zugriffsverletzung bei Dauertest
1. In welcher Zeile bleibt er hängen?
2. Könnte deine Schleifenvariable übergelaufen sein? mfG Markus |
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? |
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