Toon posts:

[Delphi] Access violation bij toevoegen aan List object

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor mijn stage ben ik aan Delphi begonnen. Ik heb nu een Listobject (TList) waaraan ik objecten wil toevoegen. Wanneer ik iets toevoegen compileert delphi gewoon maar tijdens het runnen krijg ik een access violation.

Ik kreeg de fout oorspronkelijk bij het toevoegen van eigen objecten aan een TObjectList. Nou ben ik zelfs dus helemaal terug naar TList waar ik buttons in probeer toe te voegen. Dit werkt zelfs niet.

code:
1
2
3
4
5
6
7
8
9
10
var
  Button1: TButton;
  list : TList;
begin
  list.Create;
  try
    list.Add(Button1); // hier krijg ik de access violation
  finally
    list.Free;
  end;

  • Beowulf27
  • Registratie: September 2003
  • Laatst online: 11-09-2024
Probeer eens:

list := TList.Create;

Working @ http://www.tricode.nl


Verwijderd

Topicstarter
Ongeloofelijk dat was. Ik heb hier de hele middag op lopen zoeken.
Harstikke bedankt. Deze kan dicht :P

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Snap je nu eigenlijk ook wel wat je verkeerd gedaan hebt, en waarom het zo moet zijn zoals Beowulf27 zegt?

https://fgheysels.github.io/


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
whoami schreef op 06 september 2004 @ 17:12:
Snap je nu eigenlijk ook wel wat je verkeerd gedaan hebt, en waarom het zo moet zijn zoals Beowulf27 zegt?
offtopic:
purist :P

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Niets purist.
Het is gewoon zo'n basic iets, dat je het moet begrijpen als je verder wilt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Blijkbaar moet ik dus die functie(create) van het klasse TList aanroepen en niet het object list.
Maar omdat list een instanties van list een instantie is van TList zou dit naar mijn mening niet uit moeten maken. Maar waarom maakt dit dan dus wel uit?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
TList.Create is de 'constructor' van TList. De constructor moet je hier dus (expliciet) aanroepen. Hiermee 'creeër' je het object eigenlijk. Je gaat onder andere geheugen gaan reserven voor het object dat je wilt gaan gebruiken.
Als je die constructor niet aanroept, dan is list NULL (nil in Delphi); onbestaand dus. Aangezien jij dan een de Add method gaat gaan oproepen, krijg je een access violation.

https://fgheysels.github.io/


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 22:59

Reptile209

- gers -

In andere woorden dan whoami:
Je kan geen enkele functie/constructor aanroepen van een object dat nog niet bestaat. Gezien het feit dat je al wel iets met Create() doet, snap je dat List.DoeIets() niet gaat werken als List nog niet bestaat. Maar datzelfde geldt dus ook voor de Create().
Je maakt met TList.Create() een TList-object dat je vervolgens toekent aan jouw variabele List. En dan pas kan je dus de members daarvan gebruiken met bijvoorbeeld List.DoeIets().

offtopic:
Gokkend dat bennoBuch nog dusdaanig aan het leren is dat het verhaal van whoami misschien nog wat abstract is. Verder zeggen we ongeveer hetzelfde ;)

Zo scherp als een voetbal!

Pagina: 1