Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AV bei Stringvergleich (https://www.delphipraxis.net/33424-av-bei-stringvergleich.html)

Airblader 6. Nov 2004 16:42


Re: Problem mit SetLength
 
erm...sorry...wieder was banales :cry:
Ich bekomm ein AV.
Mit Showmessages hab ich das problem ganz genau ausgegrenz.
und ich muss mich sehr wundern :shock:

Delphi-Quellcode:
if not (old_p_test = '0') then
begin
Wo bitte ist da ein Fehler :shock:

das old_p_test wird so ausgelesen (das alles ist in ner for-schleife):

Delphi-Quellcode:
old_p_test := ini.ReadString('Score','Name'+IntToStr(i),'0');
ALso langsam wirds echt ... :gruebel:

Matze 6. Nov 2004 16:43

Re: Problem mit SetLength
 
Hast du die Ini-Datei mit Create erstellt?


Nachtrag: Pro Frage ein Thread, in Zukunft.

Airblader 6. Nov 2004 16:47

Re: Problem mit SetLength
 
Klar hab ich:

Delphi-Quellcode:
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'highscore.txt');
Ja: ini ist als TIniFile definiert.
Ja: ich hab IniFiles mit eingebunden.

air
p.s. sorry, dachte nur, das wird wieder sowas kleines sein, dass sich ein extrathread nicht lohnt

Matze 6. Nov 2004 16:51

Re: Problem mit SetLength
 
Jetzt sehe ich's erst, du hast wieder mal StrToInt vergessen:

Delphi-Quellcode:
if not (old_p_test = '0') then
begin
Hmm doch nicht :wall:

Ich geh jetzt mal ins Bett :mrgreen: Sorry


Nachtrag: Zeig mal bitte deine for-Schleife.

Airblader 6. Nov 2004 16:53

Re: Problem mit SetLength
 
Daran liegts wie du festgestellt hast definitib nicht, da ich einen string lese und meine variable auch eine vom typ string ist

aber woran kann das liegen :gruebel: :wall:

Meine Schleife is ganz normal :cat:

Delphi-Quellcode:
 for i := 0 to 9 do // 0..9
        begin
                old_p_test := ini.ReadString('Score','Name'+IntToStr(i),'0');
                ShowMessage('test1');
                if not (old_p_test = '0') then
                begin
                        ShowMessage('test2');
                        old[9-i].name := Form3.XORString(old_p_test,key);
                end else
                        old[9-i].name := '-';

[..]
Die showmessages waren die tests.
die erste kommt, die anderen nichtmehr

Ultimator 6. Nov 2004 17:11

Re: Problem mit SetLength
 
Probiers mal mit
Delphi-Quellcode:
if (old_p_test<>'0') then ...
Aber eigentlich dürft's da keine AV geben... :gruebel:

Airblader 6. Nov 2004 17:39

Re: Problem mit SetLength
 
:shock:

ich hab nun

Delphi-Quellcode:
for i := 0 to 9 do // 0..9
        begin
                old_p_test := ini.ReadString('Score','Name'+IntToStr(i),'0');
                ShowMessage('s');
                if (old_p_test = '0') then
                begin
                        ShowMessage('s');
                        old[9-i].name := '-';
                        ShowMessage('s');
                end else
                        old[9-i].name := Form3.XORString(old_p_test,key);

[...]
probiert.
nun werdn die ersten zwei messages ausgegeben, das 3. nicht.
d.h. der fehler ist hier !? :shock:

Delphi-Quellcode:
old[9-i].name := '-';
old ist ein 'array of HighScore', wobei HighScore so aussieht:

Delphi-Quellcode:
type
  HighScore = record
    name: string;
    punkte: integer;
  end;
 
  TForm...

StefanDP 6. Nov 2004 19:23

Re: Problem mit SetLength
 
name ist ein reserviertes wort :warn:

Airblader 6. Nov 2004 20:33

Re: Problem mit SetLength
 
Zitat:

Zitat von StefanDP
name ist ein reserviertes wort :warn:

Danke
aber nun hab ich das:

Delphi-Quellcode:
ShowMessage('1');
if (old_p_test = '0') then
begin
         ShowMessage('2');
         old[9-i].username := '-';
         ShowMessage('3');
[...]
Das '1' bekomm ich.
Das '2' auch.
Aber vor dem '3' (wird nicht ausgegeben) kommt wieder ein AV

Ich hab nun aber

Delphi-Quellcode:
type
  HighScore = record
    username: string;
    punkte: integer;
  end;
Sowie alle old[x].name zu old[x].username geändert.

Aber username ist doch kein reserviertes wort mehr :warn:

Christian Seehase 6. Nov 2004 20:36

Re: AV bei Stringvergleich
 
Moin Airblader,

probier's mal damit:

Delphi-Quellcode:
for i := 0 to high(old) do // 0..9 
...
old[high(old)-i].username := '-';

Jelly 6. Nov 2004 20:49

Re: Problem mit SetLength
 
Zitat:

Zitat von Airblader
old ist ein 'array of HighScore'

Hast du auch Speicher reserviert für dein dynamisches Array, mittels
Delphi-Quellcode:
Setlength (old,10)
Gruß

Airblader 6. Nov 2004 20:53

Re: AV bei Stringvergleich
 
Zitat:

Zitat von Christian Seehase
Moin Airblader,

probier's mal damit:

Delphi-Quellcode:
for i := 0 to high(old) do // 0..9 
...
old[high(old)-i].username := '-';

Bringt leider auch nichts :(

Hier nochmal die komplette Schleife:

Delphi-Quellcode:
for i := 0 to 9 do // 0..9
        begin
                old_p_test := ini.ReadString('Score','Name'+IntToStr(i),'0');
                ShowMessage('1');
                if (old_p_test = '0') then
                begin
                        ShowMessage('2');
                        old[9-i].username := '-';
                        ShowMessage('3');
                end else
                        old[9-i].username := Form3.XORString(old_p_test,key);

       
                old_p_test := ini.ReadString('Score','Punkte'+IntToStr(i),'0');
                if old_p_test<>'0' then
                        old[9-i].punkte := StrToInt(Form3.XORString(old_p_test,key))
                else
                        old[9-i].punkte := 0;
        end;   // 0..9
und hier meine vars:

Delphi-Quellcode:
var
        key: string; // XOR KEY
        i: integer; // Schleifen
        old: array of HighScore;
        Pos: integer;
        user_punkte: integer;
        old_p_test: string;
Und hier definier ich die für die schleife wichtigen:

Delphi-Quellcode:
// Key
        key := 'xxxxxxxxxxxxxxxxxxxxxxxx';
        // Punkte
        user_punkte := StrToInt(Form3.Edit1.Text);
        // INI Handle
        ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'highscore.txt');
das 'xxxxxxxxxxxxxxxxxxxxxxxxxx' stimmt natürlich nicht :)

TheReaper 6. Nov 2004 22:47

Re: AV bei Stringvergleich
 
Hallo!

key und pos sind auch Reservierte Bezeichner! Weiß nicht ob es daran liegt aber sollte man nicht verwenden.

Muetze1 6. Nov 2004 23:24

Re: Problem mit SetLength
 
Moin!

Zitat:

Zitat von Jelly
Zitat:

Zitat von Airblader
old ist ein 'array of HighScore'

Hast du auch Speicher reserviert für dein dynamisches Array, mittels
Delphi-Quellcode:
Setlength (old,10)
Gruß

Ich würde vor allem erstmal Jelly's Beitrag abwarten und schauen ob es nicht daran liegt (bin ich mir ziemlich sicher)...

MfG
Muetze1

Airblader 7. Nov 2004 10:58

Re: AV bei Stringvergleich
 
Hm...danke nochmal :dp:

Werde das nun mal ausprobierne

air
/Edit:
Danke funktioniert :)
Nur wie erwartet stimmt halt die Theorie nicht ganz :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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