![]() |
Fehlermeldung bei Arbeit mit dynamischen arrays
Verwende in meinem Programm ein dynamisches array. Beim aufruf der Elemente in diesem array tritt (zufällig) ein Fehler auf, welcher allerdings nur angezeigt wird, wenn ich das Programm aus Delphi selbst starte, allerdings fällt er nicht ins Gewicht starte ich die *.exe selbst. Den Fehler würde ich trotzdem gern finden. Durch die Arbeit mit breakpoints konnte ich herrausfinden dass der Fehler nicht in einer der Prozeduren liegt. Weis leider nicht wo er sonst liegen könnte. Folgende Fehlermeldung tritt im Compiler auf:
Module Load SETUPAPI.dll. No Debug Info. Base Address: $778F0000. Process project1.exe (5244) Debug Output: HEAP[project1.exe]: Process project1.exe (5244) Debut Output: HEAP: Free Heap block 1c9418 modified at 1c9ecc after it was freed Process project1.exe (5244) Irgendwelche Vorschläge wie man diesen Fehler vermeiden kann bzw. was er bedeutet? |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Moin!
Scheint ein Zugriff auf ein Element ausserhalb des Arrays zu sein. Hast du den Range Check und Overflow Check in den Projektoptionen beim Compiler Tab eingeschaltet und das Programm getestet? MfG Muetze1 |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Bei einem Zugriff auf ein Element außerhalb des Arrays würde die Fehlermeldung meiner Meinung nach etwas anders aussehen. Nebenbei erhalte ich sie nicht wenn ich das Programm über den Explorer starte. Bei einem zugriff auf ein Element außerhalb würde der Fehler dort auch auftreten. Das Programm funktioniert ja, es stören mich nur diese Fehlermeldungen, da ich nicht weis was da im Heap vor sich geht... Außerhalb kann es nicht sein, da der Fehler NICHT innerhalb einer Prozedur oder Funktion liegt.
|
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Niemand eine Idee?
|
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Zitat:
|
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Ok, natürlich wars das :oops: gestern allerdings kam der gleiche Fehler beim gleichen Quelltext noch nicht :gruebel:
jedenfalls:
Delphi-Quellcode:
Der Fehler liegt anscheinend hier drin. Der String e ist von der Form xxxx yy , wobei er nach xxxx und yy aufgeteilt wird, und diese beiden Zahlen darstellen. Laut kompiler tritt der fehler innerhalb der For-Schleife auf.
function wordextrahieren(e:string;const startstelle:integer;trennzeichen:char):string;
var hilfsstring:string; i,j:integer; begin i:=startstelle; repeat i:=i+1; until (e[i]=trennzeichen) or (i>length(e)); SetLength(hilfsstring,i-startstelle); for j:=startstelle to i-1 do begin hilfsstring[j-startstelle]:=e[j]; end; wordextrahieren:=hilfsstring; end; |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Moin!
Zitat:
Ausserdem sind diese Compilerprüfungen immer zu empfehlen während der Entwicklung. Und zu deiner fehlerhaften Procedure:
MfG Muetze1 |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Sorry, war mir nun mal relativ sicher dass es sich nicht um dieses Problem handelt. Dass man bei einem String an der Stelle 0 nicht zugreifen darf wusste ich nicht. Bei früheren Programmen wurde mir das sogar von unserem Informatik-lehrer empfolen. Werd jetzt mal versuchen die Procedure etwas umzuschreiben.
Danke für deine Hilfe :-) |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Komm immer noch nicht weiter:
Delphi-Quellcode:
b sollte in diesem Fall den Wert '4026' haben, c den wert '10', wie ja aus dem Quellcode auch schon ersichtlich. a,b und c sind vom typ String. Jemand eine Idee, meine sind nämlich inzwischen erschöpft...
function wordextrahieren(e:string;const startstelle:integer;trennzeichen:char):string;
var hilfsstring:string; i,j:integer; begin i:=startstelle; repeat i:=i+1; until (e[i]=trennzeichen) or (i>=length(e)); SetLength(hilfsstring,i-startstelle); for j:=startstelle+1 to i-1 do begin hilfsstring[j-startstelle]:=e[j]; end; result:=hilfsstring; end; //Testaufruf: a:='4026 10' b:=wordextrahieren(a,0,' '); c:=wordextrahieren(a,length(b),' '); |
Re: Fehlermeldung bei Arbeit mit dynamischen arrays
Moin!
Debuggen lernen!
Delphi-Quellcode:
MfG
program Project1;
{$APPTYPE CONSOLE} uses sysutils; Var a, b, c : String; Function wordextrahieren(Const AString : String; Const AStart : Integer; Const ASeparator : Char): String; Var lIdx : Integer; Begin lIdx := AStart+1; While ( lIdx < Length(AString) ) And ( AString[lIdx] <> ASeparator ) Do Inc(lIdx); If ( lIdx = Length(AString) ) Then Result := Copy(AString, AStart+1, MaxInt) Else Result := Copy(AString, AStart+1, lIdx-AStart-1) End; Begin //Testaufruf: a := '4026 10'; b := wordextrahieren(a, 0, ' '); c := wordextrahieren(a, length(b)+1, ' '); WriteLn(Format(' a = "%s", b = "%s", c = "%s" ', [a, b, c])); ReadLn; End. Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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