AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriffsverletzung Pointer dereferenzieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung Pointer dereferenzieren

Ein Thema von CTest · begonnen am 30. Jul 2011 · letzter Beitrag vom 31. Jul 2011
Antwort Antwort
CTest

Registriert seit: 13. Apr 2010
Ort: Gehren
33 Beiträge
 
#1

Zugriffsverletzung Pointer dereferenzieren

  Alt 30. Jul 2011, 14:50
Hallo,

Ich habe eine Klasse TFlaeche mit der Eigenschaft Item.
Ich möchte Pointer auf Double-Werte dereferenziert in eine TDoubleList schreiben und den Pointer auf den Eintrag in der Liste in ein BTree schreiben. Beim Zugriff auf die Eigenschaft, zeigt der Pointer dann zwar noch auf die Adresse des Eintrags, es kommt aber beim dereferenzieren zur Zugriffsverletzung.

Code:
property Item[const Idx: Integer]: Pointer read GetItem write SetItem; default;
procedure TFlaeche.SetItem(const Idx: Integer; P: Pointer);
var
  idx: Integer;
begin
  FData.Add(Double(P^));
  FDataIdx[idx] := @FData.List^[FData.Count-1];
end;

function TFlaeche.GetItem(const Idx: Integer): Pointer;
begin
  Result := FDataIdx[idx]
end;

Zugriff:
var  d : Double;
...
  d := Double(FFlaeche[idx]^);
Kann mir jemand sagen, was da schief läuft?

vielen Dank

Geändert von CTest (30. Jul 2011 um 22:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Zugriffsverletzung Pointer dereferenzieren

  Alt 30. Jul 2011, 15:36
Zeig mal, in welcher Methode die Double Werte hinzugefügt werden.
Ich habe den Verdacht, dass lokale Double-Variablen als Pointer hinzugefügt werden, die sich aber im Verlauf des Programmes ständig ändern usw.!
Tut evt. nichts zur Sache, ist aber ein weiterer potenzieller Bug!

Apropos Setter & Getter - warum verwendest du da 2 Listen? Reicht eine nicht aus?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#3

AW: Zugriffsverletzung Pointer dereferenzieren

  Alt 30. Jul 2011, 20:02
Hä?
Was ist denn FFeld[I,J]?

Nebenbei: Wird in FData die 'List' nicht zwischendurch mal mit 'SetLength' woanders hin gepackt?


Und unter uns: Was Du da machst, ist ziemlich krank.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zugriffsverletzung Pointer dereferenzieren

  Alt 30. Jul 2011, 20:23
Was ist denn FFeld[I,J]?
Ja, ich sehe da auch nicht durch. Was hier ein zweidimensionales Array FFeld mit dem Rest zu tun hat...

Ohne zusammenhängenden Quelltext kann man da nicht viel dazu sagen. Am besten wäre wohl ein kleines abgeschlossenes Demoprojekt...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
CTest

Registriert seit: 13. Apr 2010
Ort: Gehren
33 Beiträge
 
#5

AW: Zugriffsverletzung Pointer dereferenzieren

  Alt 30. Jul 2011, 22:28
Hallo,
Danke für die Antwort.

Ja, die Double-Werte werden aus einer Datei gelesen und in einer Prozedur hinzugefügt. Da in der TDoubleList Speicher mit ReallocMem reserviert wird, dachte ich der Wert sei dann dort gespeichert, auch nach überschreiben der eingegebenen Variable. FDataIdx ist von einer Klasse TBTree, wo nur die ID und der Pointer eingetragen werden, da die eingegebene Variable später wieder verworfen wird, wollte ich die ebend in die andere Liste eintragen. Und ohne den BTree würde ich nicht mehr über den Index an die Werte kommen, außer ich setze Count von der Liste vorher auf den maximalen Index, dann wäre aber nicht mehr zu unterscheiden, ob der Wert schon gesetzt ist, will dann aber nil zurück haben, wenn der Wert noch nicht gesetzt ist.

Was ist denn FFeld[I,J]?
Ja, ich sehe da auch nicht durch. Was hier ein zweidimensionales Array FFeld mit dem Rest zu tun hat...
Tschuldigung, das wars nicht

Geändert von CTest (30. Jul 2011 um 22:42 Uhr)
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#6

AW: Zugriffsverletzung Pointer dereferenzieren

  Alt 31. Jul 2011, 08:01
Beschreib doch einfach mal, was Du machen willst.
Was stellt das Tupel [ID, Double] denn dar?
Das Bild hängt schief.
  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 02:14 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