You just need to add ClearStructure() in your original example (1st posting):
Code: Select all
*Ptr\s = "November 18th, 2019"
ClearStructure(*Ptr,String)
FreeMemory(Memory)
Debug *Ptr\s ; *Ptr is invalid
Using "ShowMemoryViewer():CallDebugger" you can look at the memory area:
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Question
; File Name : How to Free Memory.pb
; File version: 1.0.0
; Programming : OK
; Programmed by : StarBootics
; Date : 18-11-2019
; Last Update : 18-11-2019
; PureBasic code : V5.71 LTS
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Memory = AllocateMemory(3*SizeOf(String))
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
*Ptr.String = Memory
*Ptr\s = "PureBasic"
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
ClearStructure(*Ptr,String)
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
*Ptr + SizeOf(String)
*Ptr\s = "Version 5.71 LTS x64"
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
ClearStructure(*Ptr,String)
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
*Ptr + SizeOf(String)
*Ptr\s = "November 18th, 2019"
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
ClearStructure(*Ptr,String)
ShowMemoryViewer(Memory, 3*SizeOf(String)):CallDebugger
FreeMemory(Memory)
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<