![]() |
Wann Speicher reservieren?
Hallo zusammen,
ich wollte mal fragen für welche Konstrukte ich eigentlich Speicher reservieren muss, wenn ich sie an eine API-Funktion übergebe. Mir ist Beispielsweise bekannt, dass ich das für PChars (= dynamisches Array?) tun muss. Aber wie sieht es mit Record-Strukturen (mit Arrays oder auch ohne) aus? Gruß Mr_G |
Re: Wann Speicher reservieren?
Also... ich habe nun herausgefunden, dass man natürlich Speicher reservieren muss, wenn man nur mit dem Pointer auf ein solches Konstrukt arbeitet. Wie sieht es aber aus wenn ich z.B. einen Record normal deklariere und dann die Adresse des Records übergebe (ohne vorher was initialisiert zu haben)?
Ich wäre für Tipps in Form "allgemeiner Verhaltensregeln" sehr dankbar! |
Re: Wann Speicher reservieren?
Da das Konstrukt bereits existiert, und Du dessen Adresse übergibst, ist der Speicher ja schon vorhanden und adressierbar. Da ist es nicht nötig Speicher zu reservieren.
Im Prinzip brauchst Du New/Dispose nur wenn Du mit dynamischen Variablen hantieren willst. Sherlock |
Re: Wann Speicher reservieren?
Wenn du mit der Referenz auf ein Record arbeitest, also der Art
Delphi-Quellcode:
, dann wird für diesen bereits per Compilermagic Speicher reserviert.
var
x: TMyRecord; Nimmst du statt dessen einen Pointertypen auf einen Record der Art
Delphi-Quellcode:
, so musst du selbst Hand anlegen. Im Grunde wie sonst auch.
var
x: ^TMyRecord; Bei Records/Structs die von API Funktionen als reine out-Variablen zurückgeliefert werden, übernimmt diese Funktion meistens auch die Reservierung. Beispielsweise wird in manchen Messages ein Pointer auf einen Struct geliefert, und dort hättest du ja nichtmals die Chance einen Speicherbereich vorher dafür festzulegen. Da die WinAPI aber nicht immer zwangsweise in sich konsistent ist, kannst du eigentlich nur durch Nachschauen im msdn sicher sein wie diese oder jene Funktion es denn gerne hätte. Daher sind Faustregeln hier finde ich eher hinderlich :) |
Re: Wann Speicher reservieren?
Guten Morgen Jan,
meinst Du vielleicht sowas -> ![]() Wenn Du eine Variable mit einem RecordTypen deklarierst wird bei der "Deklaration" schon Speicher für diese Variable reserviert. Das verhält sich genauso wie bei Variablen vom type Integer, Byte, Char o.ä. Grüße Klaus |
Re: Wann Speicher reservieren?
Danke für die Antworten!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz