Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Exeption bei m:=inttostr(integer(mm)) (https://www.delphipraxis.net/129298-exeption-bei-m-%3Dinttostr-integer-mm.html)

Teekeks 16. Feb 2009 17:41


Exeption bei m:=inttostr(integer(mm))
 
Hi!
Ich habe wiedereinmal ein Problem.
Und zwar folgendes:
Ich will mir einen Erinnerer Bauen, habe aber ein Problem mit dieser Procedure:
Delphi-Quellcode:
procedure TForm1.UppdateEvents;
var i,x:integer;
    deli:string;
    s:integer;
    a:string;
begin
  Form1.Cursor:=crHourGlass;
  AllEvents:=LoadAllSimpleEvents;
 for i:=0 to High(AllEvents) do

    if IsInTime(20,AllEvents[i].Date) then
    begin
      for x:=1 to 21-Length(AllEvents[i].Title) do
        deli:=deli+'     ';
      Listbox1.Items.Add(AllEvents[i].Title+deli+DateAsString(AllEvents[i].Date,'.')+' '+InXDays(AllEvents[i].Date));
      deli:='';
    end;
 Feiert:=TFeiertage.Create;
 Feiert.Jahr:=YearAsInteger(Date);
 Feiert.Land:=BB;
 for s:=trunc(Date-3) to trunc(Date+30) do
 begin
   DateAsString(s,'.',a);
   if Feiert.IstFeiertag(DayAsInteger(s),MonthAsInteger(s),YearAsInteger(s)) then
     Listbox1.Items.Add('Feiertag   '+a+'  '+InXDays(s));
 end;
 Form1.Cursor:=crDefault;
end;
Dort bleibt er mit ner Exeption bei "deli:=deli+' ';" stehen.
Manchmal aber auch in dieser Procedure:
Delphi-Quellcode:
function DateAsString( Dateintern:TDateTime;Delemiter:string):string;
var yy,mm,dd:Word;
    y,m,d:string;
begin
  DecodeDate(Dateintern,yy,mm,dd);
  d:=inttostr(integer(dd));
  m:=inttostr(integer(mm));
  y:=inttostr(integer(yy));
  result:=d+Delemiter+m+Delemiter+y;
end;
Bei "m:=inttostr(integer(mm));".
Und das lustigste ist: Ich benutze diese procedure (uppdateevents)
ständig. Und beim Starten(er soll alles laden) funktioniert das auch. nur nicht wenn ich die aus Form2 anspreche(Main.uppdateevents;).

Ich weis echt nicht was ich falsch mache...

bitte helft mir!

gruß Teekeks

nuclearping 16. Feb 2009 17:58

Re: Mysteriöses Problem bei procedure
 
:wiejetzt:

Die Muhkuh 16. Feb 2009 17:59

Re: Mysteriöses Problem bei procedure
 
Ich würde fast tippen, dass die Arraygrenzen bei der For-Schleife erreicht werden, mal so ins Blaue rein *g*

Teekeks 16. Feb 2009 18:02

Re: Mysteriöses Problem bei procedure
 
Zitat:

Zitat von nuclearping
:wiejetzt:

Genau das dachte ich mir auch^^
Ich versteh den Fehler einfach nicht ^^
[edit]Hmmm. Das könnte sein. Muss ich mir mal angucken. ich hab bis jetzt noch nicht viel mit dynamischen arrays zutun gehabt...
Ich suche dort mal...

SirThornberry 16. Feb 2009 18:07

Re: Mysteriöses Problem bei procedure
 
könntest du bitte einen aussagekräftigen Titel verwenden der das Problem wenigstens ansatzweise beschreibt. Derzeit weiß man nur das es wohl um eine procedure geht aber wann geht es in Delphi mal nicht darum? :)

Die Muhkuh 16. Feb 2009 18:09

Re: Mysteriöses Problem bei procedure
 
Zitat:

Zitat von SirThornberry
könntest du bitte einen aussagekräftigen Titel verwenden der das Problem wenigstens ansatzweise beschreibt. Derzeit weiß man nur das es wohl um eine procedure geht aber wann geht es in Delphi mal nicht darum? :)

Wenn es um eine Funktion geht :stupid:

Teekeks 16. Feb 2009 18:12

Re: Mysteriöses Problem bei procedure
 
Ja. aber ich dachte "hmmm. ne procedure kommt vor und ich kann das problem nicht genau beschreiben weil ich es nicht verstehe. " Ich finde daher das der Titel aus meiner sicht passt :P Wäre schön wenn du mir einen anderen vorschlägst, mir fällt nichts anderes ein ^^
[roter kasten] Um genau zu sein um eine Procedure und um eine function ^^

nuclearping 16. Feb 2009 18:38

Re: Mysteriöses Problem bei procedure
 
Das Problem ist einfach zu schwer einzugrenzen, da du's ziemlich verwaschen vorträgst. Dafür war das "Hä, wie jetzt". "Manchmal bleibt er da stehen, manchmal da" ... Dann bei 'ner String-Operation kommt 'ne Exception ... Hä? Grenze das Problem doch bitte mehr ein.

Teekeks 16. Feb 2009 18:46

Re: Mysteriöses Problem bei procedure
 
mein Problem ist das ich das nicht kann. Ich mache mehrmals hintereinander das selbe und es Debugger sagt bei jedem mal das an einer stelle(immer eine der beiden) eine Exeption auftritt.

Meflin 16. Feb 2009 18:49

Re: Mysteriöses Problem bei procedure
 
Dann setzte Breakpoints und gehe schrittweise die beiden Funktionen durch oder verwende asserts um den Fehler einzugrenzen. Mabuse hat hier auch ein tolles Tutorial dazu verfasst. Wenn du dich im Debugger mal auskennst, wirst du ihn nicht mehr vermissen wollen ;)

Teekeks 16. Feb 2009 19:27

Re: Mysteriöses Problem bei procedure
 
Danke für den Link. Soviele funktionen kannte ich noch nicht vom Debugger.
Also: es gibt in diesem Befehl (fürs debuggen n bissl anders Formatiert):
Delphi-Quellcode:
      Listbox1.Items.Add(
      AllEvents[i].Title+
      deli+
      DateAsString(
      AllEvents[i].Date,'.')+
      ' '+
      InXDays(
      AllEvents[i].Date));
      deli:='';
Bei
Delphi-Quellcode:
     DateAsString(AllEvents[i].Date,'.')
eine Fehlermeldung die da lautet:"Project raised exeption class 'External: SIGSEGV'."

DP-Maintenance 16. Feb 2009 20:32

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

nuclearping 17. Feb 2009 07:45

Re: Mysteriöses Problem bei procedure
 
Wenn du tatsächlich ne externe Exception SIGSEGV bekommst, dann scheint dein Problem anderer Natur zu sein. http://en.wikipedia.org/wiki/SIGSEGV

Statt DateAsString(AllEvents[i].Date,'.') in den Parametern direkt zu verwenden, erstelle eine Hilfsvariable, der du den Wert zuweist. Setze da einen Breakpoint drauf und steppe da mit F7 bzw. F8 durch.

Blup 17. Feb 2009 08:49

Re: Mysteriöses Problem bei procedure
 
Wahrscheinlich wurden an anderer Stelle, durch Zugriffe auf ungültige Adressen, Daten des Speichermanagers zerschossen.
Unabhängig davon seh ich hier ein mögliches Speicherleck:
Delphi-Quellcode:
Feiert:=TFeiertage.Create;
Falls diese Variable (z.B. bei einem zweiten Aufruf der Funktion) bereits auf ein Objektinstanze verweist.

Teekeks 17. Feb 2009 15:09

Re: Mysteriöses Problem bei procedure
 
Hi!
@Blup: Das war das erste Problem...
@all: ich habe das Problem eingegrenzt.
Aus welchen grund auch immer tritt diese Exeption bei "m:=imttostr(2);" auf. Ich verstehe einfach nicht warum der das nicht macht... :(

Wisst ihr weiter?

shmia 17. Feb 2009 15:24

Re: Mysteriöses Problem bei procedure
 
Wenn du ein Formular TForm0815 hast, dann darf im gesamten Code die Klasse die (globale) Variable Form0815 nicht angesprochen werden.
Das kann man sich ruhig als goldene Regel an den Monitor kleben.
Delphi-Quellcode:
procedure TForm1.UppdateEvents;
begin
  Form1.Cursor:=crHourGlass; // FALSCH !!!
  Cursor:=crHourGlass;       // so wäre es richtig
Also such mal deinen gesamten Sourcecode ab, ob du diese Regel noch an anderen Stellen verletzt hast.

Teekeks 17. Feb 2009 15:49

Re: Mysteriöses Problem bei procedure
 
sehr schön. Hab ich korrigiert. ABER: Der Debugger bleibt immernoch bei "m:=inttostr(integer(mm));" mit der Exeption stehen... :(
[edit]Ist der Titel jetzt besser? [/edit]

nuclearping 17. Feb 2009 16:37

Re: Exeption bei m:=inttostr(integer(mm))
 
Ein Problem eingrenzen heisst: Problemstelle isolieren -> Neues Projekt -> Problemstelle dort implementieren -> Testen.

Und ich bezweifel, dass du in einem neuen Projekt den Fehler bei "m := inttostr (2)" bekommst.

Das heisst: Irgendwo hast du richtig Murks in deinem Programm. Etwa den Faden und Überblick verloren? ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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