Toon posts:

[Delphi] Geheugen reserveren voor dynamische array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een dynamische array in delphi die informatie bevat over een klasse van een vliegtuig.

Delphi:
1
2
3
4
5
6
7
8
9
10
11
  TKlassen = record
    Klasse: Integer;
    VliegtuigKlasseID: Integer;
    Prijs: Double;
    Capaciteit: Integer;
    AantalBeschikbarePlaatsen: Integer;
  end;

  ArrayKlassen: array of TKlassen;

  ReallocMem(ArrayKlassen, SizeOf(ArrayKlassen) * 3);


Bij de applicatie treedt steeds een error op (wat duidt op een geheugen probleem).

Nu wil ik ff 100% zeker weten of deze code voor het reserveren van geheugen voor 3 klassen goed is, want ik heb het vermoeden dat dit niet helemaal goed is.

Klopt dat?

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 28-08 20:56

Knutselsmurf

LED's make things better

Maak er eens
code:
1
Sizeof(TKlassen)
van.

- This line is intentionally left blank -


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Zoals je de code hier schrijft is het inderdaad niet goed.

Ik neem aan dat ArrayKlassen een variable is? Dan zal het dit moeten zijn:
Delphi:
1
ReallocMem(ArrayKlassen, SizeOf(TKlassen) * 3);


En moet je niet eerst AllocMem doen voordat je ReallocMem kan doen?

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Heb het even opgezocht, maar je hoeft niet eerst AllocMem voor ReallocMem te doen.
Maar houd er ook rekening mee dat het geheugen dat deze functie extra reserveerd voor jouw niet standaard wordt gevuld met 0. Er kunnen dus willekeurige waarden in staan. AllocMem doet dat wel. Je kan hiervoor ook de functie FillChar gebruiken.

We adore chaos because we like to restore order - M.C. Escher


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Of iets van setlength(arrayklassen,3)

If you are not wiping out you are nog pushing enough...


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

hehe, inderdaad Pinda :) Je hebt helemaal gelijk! Je maakt met
Delphi:
1
var ArrayKlassen: array of TKlassen;

een dynamisch array. Die moet je gewoon met SetLength van grote veranderen. Dit ik daar overheen gekeken heb. :?

tokkie als je geen dynamische arrays wil gebruiken en hetzelf doen zal je zoeits moeten doen:
Delphi:
1
2
3
4
5
6
type
  PArrayKlassen = ^TArrayKlassen;
  TArrayKlassen = array[0..MAXINT] of TKlassen;

var
  ArrayKlassen: PArrayKlassen;


Maar het makkelijste is gewoon de sinds Delphi v4 ingebouwde dynamische arrays gebruiken :)

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Het is inmiddels gelukt.

Bedankt.
Pagina: 1