Einzelnen Beitrag anzeigen

Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#1

Fehlermeldung bei der Ausgabe eines Char array

  Alt 15. Mär 2007, 19:10
Bin grad dabei ein Hangman spiel zu Programmieren... hab dafür ne eigene klasse geschrieben. Wenn ich im FormCreate nun per for schleife mein char array ausgeben lasse, dann funktionierts perfekt ohne Fehlermeldung... aber wenn ich etwas in meinem array verändere und dann das selbe noch mal versuche kriege ich folgenden Fehler:

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt HangMan.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004527AF in Modul 'HangMan.exe'. Schreiben von Adresse FFFFFFFF' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Hier noch mein Code der Klasse:
Delphi-Quellcode:
unit HangManClasses;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs ;

type
  THangManWord = class
  private
    FWord: string;
    FCharWord: array of char;
    FWordLength: integer;
    function ClearWord: boolean;
    function GetCharWord(index: integer): char;
    procedure SetCharWord(index: integer; a: char);
  public
    property Word: string read FWord write FWord;
    property CharWord[index: integer]: char read GetCharWord write SetCharWord;
    property WordLength: integer read FWordLength write FWordLength;
    procedure NewWord(a: string);
    procedure TestLetter(a: Char);
  end;

implementation

function THangManWord.ClearWord: boolean;
begin
  try
    FWord:='';
    FWordLength:=0;
    result:=true;
  except
    result:=false;
  end;
end;

function THangManWord.GetCharWord(index: integer): char;
begin
  result:=FCharWord[index];
end;

procedure THangManWord.SetCharWord(index: integer; a: char);
begin
  FCharWord[index]:=a;
end;

procedure THangManWord.NewWord(a: string);
var i:integer;
begin
if ClearWord = true then
  begin
     Word:= a;
     WordLength:= Length(a);
     SetLength(FCharWord, WordLength);
     for i:=0 to WordLength do
      begin
        FCharWord[i]:='_';
      end;
  end;
end;

procedure THangManWord.TestLetter(a: Char);
var i:integer;
begin
  for i:=0 to WordLength do
    begin
      if Word[i] = a then
        begin
          SetCharWord(i,a);
        end;
    end;
end;

end.
Und hier mein Formular: (beim Button1OnClick passiert der fehler);
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, HangManClasses, StdCtrls;

type
  TFormMain = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormMain: TFormMain;
  HangManWord: THangManWord;

implementation

{$R *.dfm}

procedure TFormMain.FormCreate(Sender: TObject);
var i:integer; output:string;
begin
HangManWord:=THangManWord.Create;
HangManWord.NewWord('heiko');
SetLength(output,hangmanword.WordLength);
for i:=0 to HangManWord.WordLength do
  begin
    output[i]:=HangManWord.CharWord[i];
  end;
edit1.Text:=output;
end;

procedure TFormMain.FormDestroy(Sender: TObject);
begin
HangManWord.Free;
end;

procedure TFormMain.Button1Click(Sender: TObject);
var a:char; output: string; i:integer;
begin
a:=edit2.text[1];
Hangmanword.TestLetter(a);
for i:=0 to HangManWord.WordLength do
  begin
    output[i]:=HangManWord.CharWord[i];
  end;
edit1.Text:=output;
end;

end.
  Mit Zitat antworten Zitat