AGB  ·  Datenschutz  ·  Impressum  







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

Speicher reallokieren

Ein Thema von Phoenix · begonnen am 9. Okt 2003 · letzter Beitrag vom 10. Okt 2003
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#1

Speicher reallokieren

  Alt 9. Okt 2003, 11:01
Hi,

ich steh grad auf dem Schlauch was das neuallokieren von Speicher angeht:

Beispiel:
Delphi-Quellcode:
procedure Test;
var
   myTest: PByteArray;
begin
   GetMem(myTest,15);
   
   // was muss ich machen, um noch 10 Bytes mehr zu dem bereits allokierten
   // Speicher dazu zu bekommen?
   
   FreeMem(myTest,25);
end;
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Speicher reallokieren

  Alt 9. Okt 2003, 11:19
Versuchs mal mit ReallocMem.

Grüße
Lutz
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#3

Re: Speicher reallokieren

  Alt 10. Okt 2003, 07:04
Hab grad festgestellt, das das so gar nicht klappen kann

Weil:
Die Deklaration von PByteArray:
Delphi-Quellcode:
  PByteArray = ^TByteArray;
  TByteArray = array[0..32767] of Byte;
Demnach hat ein PByteArray^ immer eine Länge von 32768 byte, dann kann man reallokieren wollen wie man möchte.

Lösung:
Delphi-Quellcode:
  MyByteArray = array of byte;
  PMyByteArray = ^MyByteArray;
Vorteil bei PMyByteArray: Ich allokiere ihn mit GetMem, kann dann aber mit Length und SetLength wie mit einem regulären Array arbeiten und auch eine neue Größe zuordnen, was bei PByteArray dank der konstanten Länge nicht funzt.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Speicher reallokieren

  Alt 10. Okt 2003, 07:24
Zitat von Phoenix:
Hab grad festgestellt, das das so gar nicht klappen kann

Weil:
Die Deklaration von PByteArray:
Delphi-Quellcode:
  PByteArray = ^TByteArray;
  TByteArray = array[0..32767] of Byte;
Demnach hat ein PByteArray^ immer eine Länge von 32768 byte, dann kann man reallokieren wollen wie man möchte.
Nein... wenn du nur 15 Bytes reservierst, dann hat dein Array auch nur 15 Bytes auf die du zugreifen kannst, egal wie TByteArray jetzt deklariert ist! Durch das dereferenzieren des Pointers simulierst du zwar praktisch einen Zugriff auf ein Array mit konstanter Länge von 32767 Bytes, aber wie lang das Array jetzt wirklich ist (also wieviel reservierter Speicherplatz dahinter steckt), das kommt nur darauf an wieviel zu alloziert hast!

BTW: ein dyn. Array ist bereits nur ein Pointer der implizit dereferenziert wird, einen Pointer auf ein dyn. Array zu deklarieren ist also irgendwie "doppeltgemoppelt"!
Manuel Pöter
  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 20:05 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