On Tue, 2011-01-18 at 10:08 +0200, Demosthenes Koptsis wrote: > > > > 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
I was thinking that you were freeing pFunc (using it's VARPTR) rather than freeing the memory associated to the pointer being returned. I have to agree with Benoît that working with external memory (variables) and structures are a 'at your own risk' task in Gambas. (rules vary by what your trying to access) ------------------------------------------------------------------------------ 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