Char aus String auslesen -->SIGSEGV

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
lazarus_fan
Beiträge: 15
Registriert: Mi 28. Dez 2016, 21:13

Char aus String auslesen -->SIGSEGV

Beitrag von lazarus_fan »

Hallo Leute,

ich bin Einsteiger und wollte aus einem String ein Zeichen auslesen und davon die Stelle in der Ascii-Tabelle bestimmen. Aber dies ist wohl doch nicht so einfach wie gedacht, ich bekomme immer eine SigSegv-Fehlermeldung. Den Fehler konnte ich auf eine Programmzeile einschließen. Diese ausgeklammert läuft alles bestens:


txt:string;
a_byte: byte;

txt:='Das ist ein Test';

a_byte:=ord(txt[1]); (Hier kommt dann die Fehlermeldung)

Eigentlich dachte ich, daß man mit txt[x] ganz einfach direkt auf die Zeichen zugreifen kann.
Aber auch der indirekte Weg geht nicht und es kommt SigSegv:

kar: char;

kar:=txt[1]; (Hier kommt dann die Fehlermeldung)


was mache ich falsch? Im Netz finde ich viele solcher Beispiele, es muß also gehen. Neueste Version 1.6.2 32-bit mit einem frischen
XP SP3...

Bug oder sehe ich den Wald vor lauter Bäumen nicht? :?: Vielen Dank

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Char aus String auslesen -->SIGSEGV

Beitrag von Michl »

Willkommen im Forum!

Kannst du den kompletten Code posten? So kann man nicht sagen, woran es liegt.

Sowas:
- Hauptmenü -> Projekt -> Neues Projekt ... -> Einfaches Programm
- im Quelltexteditor:

Code: Alles auswählen

program Project1;
var
  txt: string;
  a_byte: byte;
begin
  txt:='Das ist ein Test';
  a_byte:=ord(txt[1]);
  WriteLn(a_byte);
  ReadLn;
end.
sollte funktionieren.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Char aus String auslesen -->SIGSEGV

Beitrag von Epcop »

Und die Fehlermeldung posten

lazarus_fan
Beiträge: 15
Registriert: Mi 28. Dez 2016, 21:13

Re: Char aus String auslesen -->SIGSEGV

Beitrag von lazarus_fan »

Hallo,

den ganzen Quelltext posten ist nicht möglich, zu viel Text. Und auch nicht nötig, da ja der Fehler eingekreist ist.
Das kurze Testprogramm von dir funktioniert perfekt, im Dos-Fenster wird problemlos die 68 angezeigt....

wie gesagt, wenn ich meine "ord"-zeile ausklammere läuft alles problemlos....

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Char aus String auslesen -->SIGSEGV

Beitrag von Michl »

Hmm, ok.

Was ist denn die Ausgabe, wenn du vor der Zeile folgenden Code schreibst:

Code: Alles auswählen

  WriteLn(Length(txt));

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Char aus String auslesen -->SIGSEGV

Beitrag von Epcop »

lazarus_fan hat geschrieben: Und auch nicht nötig, da ja der Fehler eingekreist ist.


Nein. Der Fehler kann(ist) auch woanders sein, nur hier macht er sich bemerkbar. Dann ist die markierte Zeile nicht die fehlerhafte.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Char aus String auslesen -->SIGSEGV

Beitrag von af0815 »

lazarus_fan hat geschrieben:wie gesagt, wenn ich meine "ord"-zeile ausklammere läuft alles problemlos....

Nur so ne Frage, sind die Debugging EInstellungen aktiv oder nicht ? Wenn nicht, dann mal aufdrehen, man sieht dann eine Menge mehr.
Dateianhänge
Debuggereinstellungen
Debuggereinstellungen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Char aus String auslesen -->SIGSEGV

Beitrag von mischi »

1) Könnte ein Tippfehler sein. Die Namen der Variablen noch einmal gründlich überprüfen.
2) Beim Übersetzen range check (Option -Cr) einschalten.
3) mit dem Debugger arbeiten und sich die Variablen anschauen.

Der Fehler liegt ziemlich sicher irgendwo anders, kommt aber erst da zum Tragen.
Wenn alles nichts hilft und der Code wirklich so lang ist, dann bleibt nur die mühsame Variante nach und nach das Programm vereinfachen, bis man den Fehler tatsächlich und nicht nur vermeintlich eingekreist hat.

Michael.
MiSchi macht die fink-Pakete

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Char aus String auslesen -->SIGSEGV

Beitrag von malabarista »

Könnte es sein (weil es ein komplexeres Paket ist), dass zu Zeitpunkt, wo du auf txt[1] zugreifst, der String txt die Länge 0 hat ?

Antworten