AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi function mit eigenem Type als Rückgabewert -> Zugriffsver...
Thema durchsuchen
Ansicht
Themen-Optionen

function mit eigenem Type als Rückgabewert -> Zugriffsver...

Ein Thema von guitar1 · begonnen am 2. Mär 2008 · letzter Beitrag vom 4. Mär 2008
Antwort Antwort
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#1

function mit eigenem Type als Rückgabewert -> Zugriffsver

  Alt 2. Mär 2008, 20:27
Hi,

ich habe folgende Funktion:
Delphi-Quellcode:
function TBruchedit.CreateATermteil(ATyp: TTermteiltyp; ATermteil: string): TTermTeil; //die function ist overloaded
begin
  result.Typ:= ttNormalerTermteil;
  result.Termteil:= ATermteil; //<-- Zugriffsverletzung
end;
und an der gekenzeichneten Stelle kommt eine Zugriffsverletztung ...
TTermteil sieht so aus:
Delphi-Quellcode:
TTermteil = class(TObject)
    public
      Typ: TTermteiltyp; //TTermteiltyp = (ttBruch, ttNormalerTermteil, ttRechenzeichen);
      Bruch: TBruch;
      Termteil: String;
      Rechenzeichen: TRechenzeichen; //TRechenzeichen = (rzPlus, rzMinus, rzMal, rzGeteilt);
end;
wieso kommt es denn bitte ausgerechnet bei der zuweisung eines Strings zu einer Zugriffsverletzung und was kann ich dagegen tun?
ich habe es auch schon mit
result.Termteil:= 'blabla'; versucht, auch dann kam die Fehlermeldung?!

grüße
guitar1
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 20:30
Die Zugriffsverletzung entsteht garrantiert schon in der ersten Zeile.
Du erzeugt doch gar kein Objekt.

Edit: Dir fehlt ein Result:=TTermteil.create;
Das ist allerdings keine gute Lösung!

Gruss
Thorsten
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 20:31
Wenn TTermTeil eine Klasse ist, musst du schon eine Instance der Klasse erstellen (Stichwort .create).

Gruß
Christian
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 20:39
Moin Guitar,

um die Aussagen meiner Vor"redner" noch zu ergänzen:
Wir hatten hier schon ein paar Mal die Diskussion darüber, wie man ein Objekt als Ergebnis zurückliefert, und kamen dort immer zu dem Schluss, dass man bereits eine Instanz der Klasse übergeben, und in der Funktion/Prozedur erst mit Werten füllen sollte.
Soll heissen:
Als Rückgabewert einer Funktion eignet sich ein Objekt nicht so sonderlich, da man dann eine schlechtere Übersicht darüber hat, wann diese wieder freizugeben ist. Ausserdem kann man eine Funktion auch, ohne Compilerwarnung, als Prozedur aufrufen, so dass die zurückgegebene Instanz nie wieder freigegeben werden kann, und somit ein Speicherleck verursacht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 20:40
mist, dieses Create vergess ich aber auch echt fast immer ... danke^^

also dass das keine gute lösung ist mit dem result:= TTermteil.Create weiß ich auch, aber ich benutze TTermteil auch noch in einer anderen Klasse vom typ TObjectList und dafür brauch ich dann halt TTermteil als klasse ..
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 21:00
Ansonsten würde es auch so gehen:
Delphi-Quellcode:
procedure TBruchedit.CreateATermteil(ATyp: TTermteiltyp; ATermteil: string; var ACreatedTermTeil : TTermTeil); //die function ist overloaded
begin
  ACreatedTermTeil.Typ:= ttNormalerTermteil;
  ACreatedTermTeil.Termteil:= ATermteil; //<-- Zugriffsverletzung
end;
Übrigens ist es bei Turbo Delphi so dass er immer die nächste Zeile markiert.
Also dann einfach einen Breakpoint eine oder zwei Zeilen drüber setzten und dann per debugging testen

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 21:07
Moin Fabian,

const wäre hier besser, damit man gar nicht erst Gefahr läuft innerhalb der Methode etwas zuzuweisen:

Delphi-Quellcode:
procedure TBruchedit.CreateATermteil(ATyp: TTermteiltyp; ATermteil: string; const ACreatedTermTeil : TTermTeil); //die function ist overloaded
begin
  ACreatedTermTeil.Typ:= ttNormalerTermteil;
  ACreatedTermTeil.Termteil:= ATermteil; //<-- Zugriffsverletzung
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 2. Mär 2008, 21:11
ahhh, jetzt gehts wunderbar!!
vielen Dank!!
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: function mit eigenem Type als Rückgabewert -> Zugriff

  Alt 4. Mär 2008, 13:53
Zitat von Christian Seehase:
Moin Fabian,

const wäre hier besser, damit man gar nicht erst Gefahr läuft innerhalb der Methode etwas zuzuweisen:

Delphi-Quellcode:
procedure TBruchedit.CreateATermteil(ATyp: TTermteiltyp; ATermteil: string; const ACreatedTermTeil : TTermTeil); //die function ist overloaded
begin
  ACreatedTermTeil.Typ:= ttNormalerTermteil;
  ACreatedTermTeil.Termteil:= ATermteil; //<-- Zugriffsverletzung
end;
Stimmt Bei Klassen braucht man das ja nicht

So wäre es vermutlich besser
Delphi-Quellcode:
procedure TBruchedit.CreateATermteil(const ATyp : TTermteiltyp; const ATermteil : string; const ACreatedTermTeil : TTermTeil); //die function ist overloaded
begin
  if Assigned(ACreatedTermTeil) then // Test ob das Objekt existiert
  begin
    ACreatedTermTeil.Typ := ttNormalerTermteil;
    ACreatedTermTeil.Termteil := ATermteil;
  end;
end;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 23:29 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