分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
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
关注微信2917 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传