AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehlermeldung bei Arbeit mit dynamischen arrays
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung bei Arbeit mit dynamischen arrays

Offene Frage von "simonit"
Ein Thema von simonit · begonnen am 25. Apr 2005 · letzter Beitrag vom 28. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#1

Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 25. Apr 2005, 12:30
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?
Matthias
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 25. Apr 2005, 12:41
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
  Mit Zitat antworten Zitat
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#3

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 25. Apr 2005, 12:47
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.
Matthias
  Mit Zitat antworten Zitat
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#4

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 09:00
Niemand eine Idee?
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 09:06
Zitat von Muetze1:
Hast du den Range Check und Overflow Check in den Projektoptionen beim Compiler Tab eingeschaltet?
Sonst fällt mir ohne Quellcode auch nichts ein.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#6

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 09:16
Ok, natürlich wars das gestern allerdings kam der gleiche Fehler beim gleichen Quelltext noch nicht
jedenfalls:

Delphi-Quellcode:
  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;
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.
Matthias
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 10:25
Moin!

Zitat von simonit:
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.
Du hättest mir ruhig glauben können, das sich sowas so äussern kann. Ich schreibe hier nicht um dir Arbeit zu machen, sondern im Normalfall denke ich mir was dabei oder habe entsprechende Erfahrung. Selbst AV's ohne andere Andeutungen können bei einem Indexproblem auftreten.

Ausserdem sind diese Compilerprüfungen immer zu empfehlen während der Entwicklung.

Und zu deiner fehlerhaften Procedure:
  • Du bekommst schon Probleme in der Repeat / Until Schleife, wenn StartStelle gleich gross oder grösser als die Länge des übergebenen Strings e ist.
  • Der Fehler tritt in der For Schleife auf, da du bei dem HilfString auf den Index 0 zugreifst, was verboten ist ab den nicht ShortStrings. j - StartStelle ergibt im aller ersten Durchlauf 0 und das ist ein ungültiger Index.

MfG
Muetze1
  Mit Zitat antworten Zitat
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#8

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 13:06
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
Matthias
  Mit Zitat antworten Zitat
simonit

Registriert seit: 25. Apr 2005
15 Beiträge
 
#9

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 13:56
Komm immer noch nicht weiter:
Delphi-Quellcode:
  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),' ');
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...
Matthias
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Fehlermeldung bei Arbeit mit dynamischen arrays

  Alt 27. Apr 2005, 22:34
Moin!

Debuggen lernen!

Delphi-Quellcode:
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.
MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz