cgo调用内存泄露

avanti126 · · 2238 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

package main /* #include <stdlib.h> #include <malloc.h> void mal(char **p) { int l = 1000000; *p= (char *)malloc(l); *(*p+l-2) = 'a'; *(*p+l-1) = 'b'; } */ import "C" import ( "fmt" "sync" "time" "unsafe" ) func main() { time.Sleep(time.Second * 10) var wg sync.WaitGroup for i := 0; i < 1000; i++ { wg.Add(1) go func() { var p *C.char C.mal(&p) defer C.free(unsafe.Pointer(p)) l := 1000000 ss := C.GoStringN(p, C.int(l)) if string(ss[l-2:]) != "ab" { fmt.Println("not ab") } wg.Done() }() } wg.Wait() fmt.Println("complete!") time.Sleep(time.Second * 300) } C.GoStringN(p, C.int(l))会产生内存泄露,生成的string不会被GC,大家有遇到这个情况吗

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2238 次点击  
加入收藏 微博
3 回复  |  直到 2016-12-23 09:56:19
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传