[Gambas-user] [Fwd: Gambas3 Pointers example] signal #6
Demosthenes Koptsis
demosthenesk at ...626...
Mon Jan 17 09:33:43 CET 2011
Here is a last case about pointers i found.
CASE 1
-------
When a C++ function does not malloc any memory it may return a pointer.
In this case we can do
DIM pPointer as Pointer
pPointer = Alloc(4096)' alloc 4096 bytes
pPointer = getwd(pBuf)
'use pPointer with Str@() or other xxx@()
Free(pPointer)
pPointer=0
OK!
CASE 2
-------
When a c++ function itself allocate memory with malloc() what can we do?
Example.
--------
' Gambas module file
'char *get_current_dir_name(void);
Extern get_current_dir_name() As Pointer In "libc:6"
Public Sub Main()
Dim pFunc As Pointer
Dim sWorkingDirectory As String
'get_current_dir_name
pFunc = Alloc(4096)
Print pFunc '0xc12938
pFunc = get_current_dir_name()
Print pFunc '0xc147a0
'now we cannot Free(pFunc) it is not 0xc12938 anymore
'get_current_dir_name() malloc itself memory and return a new pointer
sWorkingDirectory = Str@(pFunc)
Print sWorkingDirectory
' Free(pFunc)
'if i unrem Free i get a crash, because i try to free the 0xc147a0
pFunc = 0
End
What can we do in such cases when a function itself allocates memory?
Should we free it? Can we?
May be we can use pointers without Alloc()?
Example, no Alloc(), no Free, just DIM pPointer
---------
' Gambas module file
'char *get_current_dir_name(void);
Extern get_current_dir_name() As Pointer In "libc:6"
Public Sub Main()
Dim pFunc As Pointer
Dim sWorkingDirectory As String
'get_current_dir_name
pFunc = get_current_dir_name()
Print pFunc '0xc147a0
sWorkingDirectory = Str@(pFunc)
Print sWorkingDirectory
pFunc = 0
End
More information about the User
mailing list