![]() |
StringReplace und Sigsegv
Hallo,
ich stehe vor einem echt seltsamen Problem mit StringReplace. Der Code ist etwas größer, daher habe ich es etwas verkürzt:
Code:
Ich verstehe nicht, warum "h" oder "q" ein problem darstellt. hs enthält verschiedene Buchstaben, kann die Buchstaben die ersetzt werden sollen enthalten, muss aber nicht. Des seltsame ist, das vorher die stringreplace normal ausgeführt werden, dann aber auf einmal ein sigsegv auftritt obwohl es im prinzip das völlig gleiche ist. Noch seltsamer ist, das an dieser Stelle sigsegv aber auch nur manchmal auftritt und nicht immer... (10 mal ausgeführt, einmal sigsegv...) wenn er aber auftritt, dann bei stringreplace.
hs1 := hs; //= strings
{funktioniert} hs1 := Stringreplace(hs1, 'r', '2', [rfReplaceAll]); {funktioniert} hs1 := Stringreplace(hs1, 'n', '2', [rfReplaceAll]); {funktioniert} hs1 := Stringreplace(hs1, 'b', '2', [rfReplaceAll]); {Sigsegv Fehler!?} hs1 := Stringreplace(hs1, 'k', '2', [rfReplaceAll]); {Sigsegv Fehler!?} hs1 := Stringreplace(hs1, 'q', '2', [rfReplaceAll]); {funktioniert} hs1 := Stringreplace(hs1, 'R', '1', [rfReplaceAll]); {funktioniert} hs1 := Stringreplace(hs1, 'N', '1', [rfReplaceAll]); Hat jemand eine Idee? Ist es denkbar dass der Sigsegv an dieser Stelle auch nur "zufällig" aufgetretten ist und der wirkliche Fehler woanders zu suchen ist?? Lg Monday P.S. zu dem Zweck der Replace: Es ist ein Hilfsstring für einen späteren Algorithmus... |
AW: StringReplace und Sigsegv
Hallo,
tritt der Fehler auch auf, wenn Du die Ersetzungen in einer Schleife durchführst? In etwa so:
Delphi-Quellcode:
Edit: Wenn Dein Applikation mit SigSegV sich verabschiedet, wird meines Wissens auch ein core file generiert. Dieses kannst Du mit
for i:= 1 to length(hs) do
begin if hs[i] in ['r','n','b','k','q'] then hs[i] := '2' else if hs[i] in ['R','N'] then hs[i] := '1'; end; ![]() Grüße Klaus |
AW: StringReplace und Sigsegv
Hallo Klaus,
danke für deine Hilfe. Ja dein Code hat funktioniert. Nun hat mir die ganze Sache aber keinen Ruh gelassen, weil es absolut komisch ist, dass der gleiche Code dreimal hintereinander funktioniert und dann nicht mehr. Nachdem ich meinen Code wieder eingesetzt habe, ist der Fehler wieder verschwunden - was ja eigentlich auch nicht sein dürfte - immerhin hatte ich den Fehler ja ein paar Stunden. Es ist der derselbe Code. Ich kann den Sigsegv nicht mehr reproduzieren?! Mal sehen, ob ich ihn morgen wieder bekomme. Lg Monday |
AW: StringReplace und Sigsegv
Es ist garantiert nicht der Code, der den Fehler verursacht, sondern höchstens auslöst. Du hast in deiner Anwendung vorher irgendwo einen schweren Schnitzer (z.B. Stack zerschossen), der dann in der Folge irgendwann zu diesem sigsegv führt. Es ist blanker Zufall, das es in dieser Konstellation passierte. Vermutlich bzw. vielleicht wäre der Fehler auch verschwunden, wenn Du die Zeilen vertauscht hättest.
Mein Tipp: Entweder arbeitest Du mit DLLs und die Parameterliste ist falsch, oder du bügelst vorher über eine lokale Variable (die auf dem Stack liegt). Kann aber auch etwas vollkommen anderes sein. :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 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