AGB  ·  Datenschutz  ·  Impressum  







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

Dispose -> ungültige Zeigeroperation

Ein Thema von PASST · begonnen am 26. Mär 2008 · letzter Beitrag vom 27. Mär 2008
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 16:17
Hallo allerseits,

nachdem ich ein Programm von Delphi4 auf Delphi7 umgestellt (neu compiliert) habe, erhalte ich beim Dispose eine Exception der Klasse EInvalidPointer 'Ungültige Zeigeroperation'.

Ich verwende den Pointer, um in einer Combobox zu jedem Eintrag einen zweiten Wert speichern zu können.

Delphi-Quellcode:
// Data record
type
  TCodeRecord = Record
    Code: String;
  end;
  // Pointer to data record
  PLngMix = ^TCodeRecord;
  PArtikel = ^TCodeRecord;
  PLieferant = ^TCodeRecord;
  PSorte = ^TCodeRecord;

[...]

// Hier fülle ich die ComboBox, im Augenblick mit 18 Einträgen
    cboxArtikel.Items.clear;
    cboxArtikel.Text := '';
    new(Artikel);
    while not eof do
    begin
      If fieldbyname('PLUNR').asstring = 'then
        Artikel^.Code := ' '
      else
        Artikel^.Code := fieldbyname('PLUNR').asstring;
      cboxArtikel.Items.AddObject(fieldbyname('NAME').asstring, TObject(Artikel));
      next;
    end;
    close;

// Hier leere ich die ComboBox vom letzten bis zum ersten Eintrag wieder
// Der letzte 17. Eintrag lässt sich löschen,
// aber beim nächsten 16. Eintrag erhalte ich die Exception
  if cboxArtikel.Items.Count > 0 then
    for i := cboxArtikel.Items.Count - 1 downto 0 do
      Dispose(PArtikel(cboxArtikel.Items.Objects[i]));
Kann mir jemand helfen?

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von defede
defede

Registriert seit: 10. Aug 2006
Ort: Stötten am Auerberg
72 Beiträge
 
Delphi 7 Professional
 
#2

Re: Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 16:40
Hallo,
Ist nur eine Idee aber wenn du mal versucht nur den Index 0 immer zu Löschen?
Falls das Array beim Löschen zusammenrutscht kann der INdex ja nicht gefunden werden.
Invader Zim
Obey Zim
Fear Zim
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 16:45
Nein, da fällt nichts zusammen. Der Index 16 ist ja vorhanden. Ich kann mir auch den Wert cboxArtikel.Items[16] anzeigen lassen nachdem Dispose(PArtikel(cboxArtikel.Items.Objects[17])) erfolgreich war.
  Mit Zitat antworten Zitat
Benutzerbild von defede
defede

Registriert seit: 10. Aug 2006
Ort: Stötten am Auerberg
72 Beiträge
 
Delphi 7 Professional
 
#4

Re: Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 16:49
Na dann vor dem Delete einfach prüfen ob das Object <> NIL ist? Ich meine damit würdest du das ganze umgehen aber
so richtig gut ist diese Lösung auch nicht.
Invader Zim
Obey Zim
Fear Zim
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 17:02
Mußt du nicht für jeden Eintrag in die Combobox einen neuen Artikel erstellen?

Delphi-Quellcode:
    // Hier fülle ich die ComboBox, im Augenblick mit 18 Einträgen
    [ ... ]
    // new(Artikel); // --> hier raus
    while not eof do
    begin
      new(Artikel); // <-- hier rein
      If fieldbyname('PLUNR').asstring = 'then
        Artikel^.Code := ' '
      else
        Artikel^.Code := fieldbyname('PLUNR').asstring;
      cboxArtikel.Items.AddObject(fieldbyname('NAME').asstring, TObject(Artikel));
      next;
    end;
denn beim Entfernen aus der ComboBox gibts du das Objekt auf dem Zeiger PArtikel frei.
Da du aber beim Füllen immer das gleiche Objekt verwendest, werden beim löschen des 17. Artikels alle Objekte (was quasi ja nur einens ist) von 17 bis 0 freigeben.

nur eine Vermutug, denn so hab ich mit Comboboxen noch nicht gearbeitet.
  Mit Zitat antworten Zitat
omata

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

Re: Dispose -> ungültige Zeigeroperation

  Alt 26. Mär 2008, 17:06
@gmc616: genau das ist es.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Dispose -> ungültige Zeigeroperation

  Alt 27. Mär 2008, 12:13
Danke, so klappt es. Allerdings wundert es mich, wenn es dann in Delphi 4 funktioniert haben sollte!?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Dispose -> ungültige Zeigeroperation

  Alt 27. Mär 2008, 17:36
Zitat von PASST:
Danke, so klappt es. Allerdings wundert es mich, wenn es dann in Delphi 4 funktioniert haben sollte!?
Wenn das so war, war es reiner Zufall und eine tickende Zeitbombe, die nun eben hochgegangen ist.
  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: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