Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Stack überlauf (https://www.delphipraxis.net/190185-stack-ueberlauf.html)

EWeiss 9. Sep 2016 22:46

AW: Stack überlauf
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1347285)
Kannst du mal ausprobieren, ob es an dem String Energy liegt, oder ob auch ein anderer Text mit gleicher Länge das Problem zeigt?

Kann ich gerne machen.

Ok
"123456" kracht
"1234567" kracht nicht
"12345" kracht nicht
"Heilig" kracht.

Es scheint ein Problem mit der String länge 6 vorzuliegen.
Wie soll ich das beheben. :duck:

gruss

Uwe Raabe 9. Sep 2016 23:20

AW: Stack überlauf
 
Es ist vermutlich nicht der String selbst, sondern eine andere Variable, die je nach Stringlänge an anderer Position im Speicher liegt. Ab hier (eigentlich schon vorher) wird das jetzt aber reine Spekulation. Das Problem liegt offenbar ganz woanders und hat mit dem String Energy überhaupt nichts zu tun.

Es kann auch sein, daß der String (genauer die Stringlänge) irgendwie als etwas anderes interpretiert wird. Z.B. wenn vor dem String ein Array liegt und man dieses über seine Obergrenze hinaus liest.

Zugegeben, sowas ist schwer zu finden.

EWeiss 9. Sep 2016 23:28

AW: Stack überlauf
 
Wie du schon sagst es liegt an der String länge. (Irrtum an den Strings im Speicher)
Zitat:

Es ist vermutlich nicht der String selbst, sondern eine andere Variable, die je nach Stringlänge an anderer Position im Speicher liegt.
Es war der String dieser lag irgendwo im Speicher nur nicht da wo er hin gehörte.

Frustrierend das ganze .. ;)

Muss mir wohl mal das Spectragram vornehmen denn der Fehler tritt nur in Zusammenhang damit auf.

gruss

EWeiss 10. Sep 2016 06:09

AW: Stack überlauf
 
Problem ist erledigt.

Habe in meinem Spectragram Window alle Controls deaktiviert und dann nach und nach wieder aufgesetzt.
Dabei habe ich bemerkt das die Resourcen nicht zu meiner Virtuellen Liste addiert wurden.
Zudem (einer meiner großen früheren Fehler) war die Variable zum übergeben der Strings in die Liste Global definiert.
Das hatte zur folge das die Strings der (Handles, DC's, Pfade und die der Images) irgendwo ins Nirwana gelangt sind.

Es wundert mich nur das es nicht schon früher gekracht hat.
Danke für eure Hilfe.

gruss

himitsu 10. Sep 2016 08:21

AW: Stack überlauf
 
kleines Beispiel ... wird komplizierter, wenn der String noch irgendwo "verrechnet" wird (z.B. mit 'nem Pfad zusammengesetzt)

Delphi-Quellcode:
type
  // For System.pas internal use only.
  // Note, this type is duplicated in getmem.inc for diagnostic purposes. Keep in sync.
  PStrRec = ^StrRec;
  StrRec = packed record
  {$IF defined(CPU64BITS)}
    _Padding: Integer; // Make 16 byte align for payload..
  {$ENDIF}
    codePage: Word;
    elemSize: Word;
    refCnt: Integer;
    length: Integer;
  end;


Size := SizeOf(StrRec) + Length('123456' + #0#0) * SizeOf(Char)
12 + (6+2)*2 = 28 // '123456'
12 + (5+2)*2 = 24 // '12345'

Delphi-Quellcode:
type
  SmallBlockTypes: array[0..NumSmallBlockTypes - 1] of TSmallBlockType =(
    {8/16 byte jumps}
    (BlockSize: 16{$ifdef UseCustomFixedSizeMoveRoutines}; UpsizeMoveProcedure: {$ifdef CPU386)}Move12{$else}Move8{$endif}{$endif}),
    (BlockSize: 24{$ifdef UseCustomFixedSizeMoveRoutines}; UpsizeMoveProcedure: Move20{$endif}),
    (BlockSize: 32{$ifdef UseCustomFixedSizeMoveRoutines}; ...
'1234567' liegt in SmallBlockTypes 32 und davor/dahinter sind 2 Byte Offset frei
'123456' liegt in SmallBlockTypes 32 und davor/dahinter sind 4 Byte Offset frei
'12345' liegt in SmallBlockTypes 28 und davor/dahinter sind 0 Byte Offset frei

Entweder wird mit diesem String irgendwas überschrieben (Overflow) oder irgendwas Anderes überschreibt da was und dein String landet nur zufällig in dem Block, wo das passiert.

EWeiss 10. Sep 2016 08:24

AW: Stack überlauf
 
Danke für die Infos..
Kann man sicher einmal gebrauchen ;)

Wie gesagt bei mir war ein durcheinander bedingt dadurch das meine Variable global definiert war.
Hat mich ja nur 2 Tage gekostet den Fehler zu finden :)

gruss

EWeiss 11. Sep 2016 09:00

AW: Stack überlauf
 
Nachdem das Problem jetzt behoben ist habe ich mir einen neuen Skin gegönnt.
System Shock (bessere Auflösung)

Die Qualität der Bilder die man hier hochläd lassen echt zu wünschen übrig @Daniel sehr schlechte Qualität.
Lohnt sich schon fast gar nicht mehr. Vergleich die einfach mal.

Anhang gelöscht.

gruss

Daniel 11. Sep 2016 09:14

AW: Stack überlauf
 
Zitat:

Zitat von EWeiss (Beitrag 1347378)
Die Qualität der Bilder die man hier hochläd lassen echt zu wünschen übrig @Daniel sehr schlechte Qualität.
Lohnt sich schon fast gar nicht mehr. Vergleich die einfach mal.

Die hier hochgeladenen Bilder sollen zur Illustration eines Problems oder einer Lösung dienen. Sie sollen eine Idee, einen Eindruck vermitteln.
Hochauflösende Fotos in Top-Qualität waren nie das Ziel.

EWeiss 11. Sep 2016 09:24

AW: Stack überlauf
 
Zitat:

Zitat von Daniel (Beitrag 1347379)
Zitat:

Zitat von EWeiss (Beitrag 1347378)
Die Qualität der Bilder die man hier hochläd lassen echt zu wünschen übrig @Daniel sehr schlechte Qualität.
Lohnt sich schon fast gar nicht mehr. Vergleich die einfach mal.

Die hier hochgeladenen Bilder sollen zur Illustration eines Problems oder einer Lösung dienen. Sie sollen eine Idee, einen Eindruck vermitteln.
Hochauflösende Fotos in Top-Qualität waren nie das Ziel.

Na ja desto trotz waren sie schon mal besser.
Aber gut wie du willst ;)

Nebenbei *.png ist alle mal kleiner sehe den sinn nicht ein Hochauflösendes Format zu komprimieren und dann ist es doch nicht kleiner.
Es spart also keinen Platz auf deinen Server. na gut bei 100% Kompression schon.
Ok werde dann in Zukunft nur noch verlinken.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz