AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace und Sigsegv

Ein Thema von Monday · begonnen am 21. Sep 2013 · letzter Beitrag vom 22. Sep 2013
Antwort Antwort
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#1

StringReplace und Sigsegv

  Alt 21. Sep 2013, 11:59
Hallo,

ich stehe vor einem echt seltsamen Problem mit StringReplace. Der Code ist etwas größer, daher habe ich es etwas verkürzt:

Code:
  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]);
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.

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...
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: StringReplace und Sigsegv

  Alt 21. Sep 2013, 13:35
Hallo,

tritt der Fehler auch auf, wenn Du die Ersetzungen in einer Schleife durchführst?

In etwa so:

Delphi-Quellcode:
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;
Edit: Wenn Dein Applikation mit SigSegV sich verabschiedet, wird meines Wissens auch ein core file generiert. Dieses kannst Du mit gdb auswerten. Vielleicht kommst Du so auf den Verursacher.

Grüße
Klaus
Klaus

Geändert von Klaus01 (21. Sep 2013 um 14:12 Uhr)
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#3

AW: StringReplace und Sigsegv

  Alt 21. Sep 2013, 18:37
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
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: StringReplace und Sigsegv

  Alt 22. Sep 2013, 09:31
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:00 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