Char aus String auslesen -->SIGSEGV
-
- Beiträge: 15
- Registriert: Mi 28. Dez 2016, 21:13
Char aus String auslesen -->SIGSEGV
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
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
Re: Char aus String auslesen -->SIGSEGV
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:sollte funktionieren.
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.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Char aus String auslesen -->SIGSEGV
Und die Fehlermeldung posten
-
- Beiträge: 15
- Registriert: Mi 28. Dez 2016, 21:13
Re: Char aus String auslesen -->SIGSEGV
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....
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....
Re: Char aus String auslesen -->SIGSEGV
Hmm, ok.
Was ist denn die Ausgabe, wenn du vor der Zeile folgenden Code schreibst:
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;
Re: Char aus String auslesen -->SIGSEGV
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.
- 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
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- 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
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.
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
-
- 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
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 ?