AGB  ·  Datenschutz  ·  Impressum  







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

zugriffsverletzung bei TStrings

Ein Thema von glkgereon · begonnen am 14. Mai 2004 · letzter Beitrag vom 14. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:05
hi
ich hab ne procedure geschrieben
immer beim ersten mal, wenn ich auf einen (lokalen) TStrings zugreife, gibts einen zugriffsfehler

warum?
Delphi-Quellcode:
procedure TForm_Main.faecher_bereitschaft_save(Sender: TObject);
var
i, z:integer;
data:TStrings;
Begin
//data.Create;
//data.Clear;
//data.LoadFromFile('dummy.dat');

for i:=1 to 100 do
        Begin
        data.Add(inttostr(bereitschaft[i]));
        end;
data.SaveToFile('bereitschaft.dat');

data.Clear;

for i:=1 to 100 do
        Begin
        For z:=1 to 10 do
                Begin
                data.Add(inttostr(faecher[i, z]));
                End;
        End;
data.SaveToFile('faecher.dat');

//data.Destroy;
End;
wie amn sieht hab ich schon so einiges probiert, und es wieder auskommentiert, da es nit funzte...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:12
Du solltest die Stringlist auch anlegen:

Code:
data := TStringList.Create;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:12
Wie erzeugt man eine Instanz einer Klasse????
Delphi-Quellcode:
var
  i, z: Integer;
// lData: TStrings;
begin
  with TStringList.Create do
  try
    LoadFromFile('dummy.dat');

    for i := 1 to 100 do
      Add(IntToStr(Bereitschaft[i]));

    SaveToFile('Bereitschaft.dat');

    Clear;

    for i := 1 to 100 do
      for z := 1 to 10 do
        Add(IntToStr(Faecher[i, z]));

    SaveToFile('faecher.dat');
  finally
    Free;
  end;
end;
Nebenbei, es war auch keinerlei Ressourcenschutzblock vorhanden
Nachtrag: irgendwie bockt mein Source formatter
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:29
aber wenn ich am anfang sage data.create gibts nem fehler

und data:=stringlist.create versteh ich nicht
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:37
Ein Konstruktor wird immer in der Art:
Code:
<Objekt> := <Klassenname>.<Konstruktor>
aufgerufen. Nur der Konstruktur einer Klasse (ist auch eine sog. Klassenfunktion) weiß wie eine Klasse erstellt wird (nötiger Speicher, ...) und liefert einen Zeiger auf das erstellte Objekt zurück.

In anderen Sprachen ist das Ähnlich:
Code:
<Objekt-Zeiger> = new <Klassenname>
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:40
aber ich hab die variable doch oben deklariert
da peil ich jetzt nit so ganz...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:48
Du hast mit der Variablen-Deklarartion nur den Speicher für einen Zeiger reserviert (alles was in Delphi von TObject abgeleitet ist, für das wird in der Deklaration nur ein Zeiger angelegt).

Bei C++ hättest Du die Möglichkeit deine Variable als Zeiger oder als Objektinstanz anzulegen (hoffentlich halbwegs richtig benahmst)
Code:
CMyObjekt* pPointerAufMyObjekt;
CMyObjekt RichtigesObjekt;
bei der Zeigerversion mußt Du nocht mittels
Code:
 pPointerAufMyObjekt := new CMyObjekt
eine Instanz anlegen.

Unter Delphi gibt es nur noch die Version mittels Zeiger. Ab statt dann mit dem Zeigeroperator arbeiten zu müssen (pPointerAufMyObjekt->MyFunction) gibt es nur noch den Punkt. D.h. die Konfusion ob jetzt Zeiger oder Punkt nötig ist fällt weg.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:50
aber, wenn man den global deklariert, dann funzt es

hab ich ausprobiert, bzw es funzt auf jeden fall
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:54
nur der Construcor kann eine INstanz einer Klasse erzeugen!
  lData := TStringList.Create; Das bedeutet: Der Constructor von TStringList erzeugt eine Instanz, die wird an die Refferenz "lData" übergeben.
Nun kannst du mit lData arbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: zugriffsverletzung bei TStrings

  Alt 14. Mai 2004, 19:54
Es funktioniert dort auch nicht - es kracht zufälligerweise halt nicht, da du auf einen Speicherbereich zugreifst der zwar in deinem (von Windows) zugewiesenen Speicherbereich liegt, jedoch es nicht stört wenn etwas dort hingeschrieben wird. Bei einer lokalen Variable werden diese anders Abgelegt (es müßte auf dem Stack sein) und dort hat ein nicht zugewiesener Zeiger schneller eine sichtbare Fehlfunktion.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:17 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