AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung bei Kompilierung

Ein Thema von No0oB · begonnen am 11. Sep 2007 · letzter Beitrag vom 11. Sep 2007
Antwort Antwort
No0oB

Registriert seit: 29. Mai 2006
Ort: Hanau
16 Beiträge
 
Delphi 2005 Personal
 
#1

Zugriffsverletzung bei Kompilierung

  Alt 11. Sep 2007, 19:32
Hallo Community.
Ich stehe gerade vor einem eigenartigen Problem und ich hoffe, dass ihr mir dabi weiterhelfen könnt.
Ich schreibe gerade ein Übungsprogramm für die Schule, wo OOP nähergebracht wird, an Beispiel eines Autos.
Alles klappt wunderbar, nun möchte ich ein Attribut "Log" füllen und da hängt es bei mir.
Ich werde die Codeschnipsel anhängen, jedoch werde ich das Problem beschreiben, bevor ich das mache.

Ich möchte in Prozeduren (auch im Konstruktor) auf eine Prozedur zugreifen, die mir einen Logeintrag erstellt.
Wenn ich dies mache, erhalte ich die Fehlermeldung
Zitat:
Zugriffsverletzung bei Addresse 00403F38 in Modul 'Auto.exe'. Schreiben von Addresse FFFFFFFC.
Ich nehme an, dass irgendwo ein Zugriff nicht erlaubt ist, obwohl mir das sehr eigenartig erscheint, da die Prozedur public ist.
Naja, ohne Code lässt sich nur herumraten, daher folgen hier die Codeschnipsel.

Das Programm besteht aus dem Formular und einer zusätzlichen Unit (uTAuto), welches die Autoklasse beinhaltet.
Hier sind also die Codeschnipsel (Ich habe das, was nicht zu dem Problem gehört, weggelassen):

Hier die Deklarationen
Code:
{  Define the type for returning arrays }
  type TStringArray = array of string;
  type TAuto = class
    private
      Log: TStringArray;
    public
      function getLog: TStringArray;
      procedure writeLogEntry(msg:string);
  end;
Hier die Funktion getLog
Code:
function TAuto.getLog: TStringArray;
  begin
    getLog := self.Log;
  end;
Zuletzt die Prozedur writeLogEntry
Code:
procedure TAuto.writeLogEntry(msg:string);
  var newKey: integer;
  begin
    newKey := High(self.Log);
    self.Log[newKey] := msg;
  end;
Ich hoffe mir kann jemand helfen,
Danke.
blah
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zugriffsverletzung bei Kompilierung

  Alt 11. Sep 2007, 19:34
Du musst bei dynamischen Arrays die Länge vorher mit Setlength() festlegen (repsektive damit das Array bei bedarf vergrößern).

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
No0oB

Registriert seit: 29. Mai 2006
Ort: Hanau
16 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Zugriffsverletzung bei Kompilierung

  Alt 11. Sep 2007, 19:58
Das heißt, dass ich im Konstruktor SetLength(0) schreibe und dann, in dem writeLogEntry jeweils das SetLength um 1 erhöhe ?
blah
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Zugriffsverletzung bei Kompilierung

  Alt 11. Sep 2007, 20:04
Zitat von No0oB:
Das heißt, dass ich im Konstruktor SetLength(0) schreibe und dann, in dem writeLogEntry jeweils das SetLength um 1 erhöhe ?
Das SetLength(0) im Konstruktor ist überflüssig, reicht prinzipiell wenn Du das jeweils um 1 in writelogEntry erhöhst.

Was du aber noch verbessern könntest:
1.) Du könntest das Array immer in 5er (oder 6er oder wie auch immer) Schritten erhöhen (Du musst die Anzahl der Log-Einträge dazu aber manuell mitzählen, um dann wieder eröhen zu können) - das ist auf dauer Performanter
2.) Du verwendest statt einem dynamischen Array die Klasse Delphi-Referenz durchsuchenTStringList.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
No0oB

Registriert seit: 29. Mai 2006
Ort: Hanau
16 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Zugriffsverletzung bei Kompilierung

  Alt 11. Sep 2007, 20:24
Vielen Dank für deine Hilfe
blah
  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 11:34 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