Re: [go-nuts] i can't use defer c.free to release the cgo.cstring memory when my func return the cstring

2020-11-17 Thread 杜仲
that's the problem, i use c just like an channel, the value final send to 
other language. i know i can make an call back function in c and then 
release that memory in c code.
 regrettably, this will take many time and i don;t have so much.
however ,thx

在2020年11月18日星期三 UTC+8 上午10:43:20 写道:

> On Tue, Nov 17, 2020 at 6:38 PM 杜仲  wrote:
> >
> > my go version is 1.13.
> > i used cgo.cstring in my func, and the func will return cstring.
> > i don't know when c complete work about the cstring memory.
> > if i used defer c.free to release the cstring memory, the cstring val 
> will change and return a unexpected value, especially at often apply memory 
> on low memory environment.
> > now i use a funccollect the pointer and release after 1 hour or later.
> > is there any other way to solve?
>
> A string allocated with C.CString is allocated using the C malloc
> function. It sounds like you are passing that string to C, in which
> case it becomes the responsibility of the C code to free the string.
> C code has to be aware of memory use and has to free memory when it is
> no longer needed. If your C code does not track memory properly, that
> is unfortunate, but there is nothing you can do to fix it safely on
> the Go side.
>
> Ian
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ef1f610d-650e-43dc-8a98-e2d120aae9c5n%40googlegroups.com.


Re: [go-nuts] i can't use defer c.free to release the cgo.cstring memory when my func return the cstring

2020-11-17 Thread Ian Lance Taylor
On Tue, Nov 17, 2020 at 6:38 PM 杜仲  wrote:
>
> my go version is 1.13.
> i used cgo.cstring in my func, and the func will return cstring.
> i don't know when c complete work about the cstring memory.
> if i used defer c.free to release the cstring memory, the cstring val will 
> change and return a unexpected value, especially at often apply memory on low 
> memory environment.
> now i use a funccollect the pointer and release after 1 hour or later.
> is there any other way to solve?

A string allocated with C.CString is allocated using the C malloc
function.  It sounds like you are passing that string to C, in which
case it becomes the responsibility of the C code to free the string.
C code has to be aware of memory use and has to free memory when it is
no longer needed.  If your C code does not track memory properly, that
is unfortunate, but there is nothing you can do to fix it safely on
the Go side.

Ian

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUJm5eReHtxOxaTCsCctfv1JSab5hWwyPBoUca2NnEm-w%40mail.gmail.com.


[go-nuts] i can't use defer c.free to release the cgo.cstring memory when my func return the cstring

2020-11-17 Thread 杜仲
my go version is 1.13.
i used cgo.cstring in my func, and the func will return cstring.
i don't know when c complete work about the cstring memory.
if i used defer c.free to release the cstring memory, the cstring val will 
change and return a unexpected value, especially at often apply memory on 
low memory environment.
now i use a funccollect the pointer and release after 1 hour or later.
is there any other way to solve?

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/01f2da1c-23d5-41a8-a451-c6cc66478e19n%40googlegroups.com.