On Mon, 2011-01-17 at 13:59 -0800, John Spikowski wrote: > On Mon, 2011-01-17 at 21:36 +0200, Demosthenes Koptsis wrote: > > On Mon, 2011-01-17 at 13:33 +0100, Benoît Minisini wrote: > > > Public Sub Main() > > > > Dim pFunc As Pointer > > Dim sWorkingDirectory As String > > > > 'get_current_dir_name > > pFunc = get_current_dir_name() > > Print pFunc > > > > sWorkingDirectory = Str@(pFunc) > > Print sWorkingDirectory > > > > free_ptr(pFunc) > > pFunc = 0 > > > > End > > Isn't pFunc a Gambas variable (memory location) which is maintained by > the Basic? Why would you free it externally? I would think Gambas would > complain about that.
Yes pFunc is a pointer. A pointer is a variable that holds a memory address. At line Dim pFunc As Pointer i declare the variable. But i do not use Alloc() to alocate a memory address with Gambas3. i do this because the external function get_current_dir_name() allocates a memory address internal. This is described in manual http://manpages.ubuntu.com/manpages/dapper/en/man3/get_current_dir_name.3.html "get_current_dir_name, which is only prototyped if _GNU_SOURCE is defined, will malloc(3) an array" to free a pointer in such a case i have to use free() function of C. Next is the same example but with an error. The error is that i allocate memory with Gambas3 and try to Free() the memory later. But when i call get_current_dir_name() this function set again a new pointer and the address from Gambas3 Alloc() is not accesible any more. So when i try to Free() the pointer in fact i try to free an unlocated memory! ' 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 '(Pointer 0x185b918) pFunc = get_current_dir_name() Print pFunc '(Pointer 0x185d780) 'notice that address was changed ' from now on the address 0x185b918 'is unreachable 'and the new address 0x185d780 'is not allocated by Gambas3 ! 'so we cannot free both of them 'with Free() function of Gambas3! sWorkingDirectory = Str@(pFunc) Print sWorkingDirectory Free(pFunc) pFunc = 0 End > > > ------------------------------------------------------------------------------ > Protect Your Site and Customers from Malware Attacks > Learn about various malware tactics and how to avoid them. Understand > malware threats, the impact they can have on your business, and how you > can protect your company and customers by using code signing. > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user -- Regards, Demosthenes Koptsis. ------------------------------------------------------------------------------ Protect Your Site and Customers from Malware Attacks Learn about various malware tactics and how to avoid them. Understand malware threats, the impact they can have on your business, and how you can protect your company and customers by using code signing. http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user