AGB  ·  Datenschutz  ·  Impressum  







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

Initialisiert New() den speicher mit #0?

Ein Thema von SirThornberry · begonnen am 16. Jun 2006 · letzter Beitrag vom 16. Jun 2006
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 17:30
Hallo,

mich würde interessieren ob "New()" den Speicher mit #0 initialisiert. Leider bin ich aus der Hilfe nicht schlau geworden.

Wenn ich mit New() Speicher für eine Record-Struktur anfordere wo auch Strings drin sind, kann ich dann einfach ZeroMemory auf diesen Speicher anwenden (wäre ja nur Nötig wenn New() den Speicher nicht mit #0 initialisiert)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 17:33
New() holt meines Wissens einfach nur Speicher ran und füllt den nicht. Aber du könntest es schlimmstenfalls ausprobieren:
Delphi-Quellcode:
type
  PMyRec = ^MyRec;
  MyRec = record
    i: Integer;
  end;

p: PMyRec = nil;

repeat
  Dispose(p);
  New(p);
until p.i <> 0;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 17:36
ok, ich hab es ausprobiert und der speicher war nicht initialisiert. Wenn in dem Record strings wären würde das ja dann fatale auswirkungen haben wenn die nicht auf nil stehen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 17:53
New initialisiert sehrwohl den Speicherbereich - allerdings nur wo notwendig.

New alloziert mit GetMem Speicher und initialisiert diesen mit Initialize():
Zitat von OH:
Initialize simply zeros out the memory occupied by long strings, variants, and interfaces, causing long strings to be empty and variants and interfaces to be Unassigned.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 18:23
Was passiert dann wenn ich auf den Speicher ZeroMemory anwende obwohl Strings etc. drin sind? Oder auf welche Art und weise kann man das ganze noch mit #0 initialisieren?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

Re: Initialisiert New() den speicher mit #0?

  Alt 16. Jun 2006, 19:31
wenn du das am Anfang machst ... nichts.

Wenn du es machst, nachdem z.B. einem String Daten zugewiesen wurden, dann hast du ein MemoryLeak ... der Stringzeiger wäre dann NIL (=Leersting), aber die alten Daten würden noch existieren.


Also wenn du eh alles initialisieren willst, dann geht es am schnellsten, wenn du per GetMem den Speicher holst und dann mit ZeroMem über alles drübergehst.

Initialize geht zwar auch ZeroMem-artig über den "Record", aber es setzt nur da auf #0, wo z.B. ein String steht ... der Rest bleibt unberührt.


Also wenn du per erst New deinen Speicher allocierst und dann gleich per ZeroMem drübergehst passiert nichts, außer daß du Speicher doppelt initialisiert (auf #0 gesetzt) hast ... demnach sinnloser Weise Initialize aufgerufen wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 04:54 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