Re: [go-nuts] i can't use defer c.free to release the cgo.cstring memory when my func return the cstring
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
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
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.