Inhalt einer Struktur löschen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Inhalt einer Struktur löschen

Beitrag von Bisonte »

Hallo.

Mal ganz doof gefragt :

Wie lösche ich die Inhalte einer einfachen Stuktur ?

Code: Alles auswählen

Structure test
name.s
plz.l
ort.s
EndStructure

Global Adresse.test
In diesem Falle... Wie leere ich die Variable Adresse ohne alles per hand einzelnd zu löschen. Also Adresse\Name = "" mein ich nicht.

Es geht darum das ich eine extrem grössere Struktur habe und da wollt ich jetzt am besten nicht jeden wert einzelnd löschen.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Code: Alles auswählen

memset_(@test,0,SizeOf(test))
?
Win11 x64 | PB 6.20
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

Structure test
  name.s
  plz.l
  ort.s
EndStructure

Global Adresse.test

Adresse\name = "Bisonte"

ZeroMemory_(@Adresse, SizeOf(test))

Debug Adresse\name
Aber ich denke, die Strings werden wohl erst am Programmende aus dem
Speicher verschwinden?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Tankeschön...

Äh die Strings sind auch sofort leer... also nicht erst nach prg-ende.
(wird wahrscheinlich nur der Pointer gelöscht. meinst du das evt ?)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> (wird wahrscheinlich nur der Pointer gelöscht. meinst du das evt ?)
Genau das, der Stringmanager wird von unserem Attentat wohl nichts
mitbekommen und die Strings, die keiner nuzten kann bis Programmende
verwalten.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es gibt ein wörkraund...
hatte freak mal im englischen gepostet...

ich schau nebenbei mal...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Nicht Nötig....

Code: Alles auswählen

Procedure FreePBString(*Address) ; Dirty Hack
  Protected String.String
  PokeL(@String, *Address)
EndProcedure

Define Test.s
Test.s = "HAHA"
Debug Test
FreePBString(@Test)
Debug Test
bzw. das sollte um 1. Call-Ebene schneller sein:

Code: Alles auswählen

Structure FreeString
  StructureUnion
    Dummy.String
    Setter.Integer
  EndStructureUnion
EndStructure

Procedure FreePBString(*Address) ; Dirty Hack
  Protected String.FreeString
  String\Setter\i = *Address
EndProcedure

Define Test.s
Test.s = "HAHA"
Debug Test
FreePBString(@Test)
Debug Test
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yup, genau das meinte ich... :mrgreen:

also, das erste... das zweite ist doch fishy :?
Zuletzt geändert von Kaeru Gaman am 15.05.2009 20:33, insgesamt 2-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> Nicht Nötig....
Der Code ist aber nicht für diesen Fall. Der ist für Hardcore String in
StructureMemory Erzeuger :mrgreen:

Ich denke mal, sobald ein String in der Strukture neubelegt wird, wird der
alte auch freigeben.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

aber grundsätzlich...
wenn man das Struct Element als Element einer LList erzeugt, kann man einfach DeleteElement benutzen.

deswegen würde sich lohnen, eine LList für ein einziges Element zu erstellen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten