我用以下定義包裝了一個(gè) C 函數(shù):int parser_shift(parser* parser, void* buffer, int length);它從未解析字節(jié)的內(nèi)部緩沖區(qū)中刪除最多 length 個(gè)字節(jié),并將它們存儲(chǔ)在給定的緩沖區(qū)中?,F(xiàn)在我希望將它包裝成一個(gè)具有以下定義的 Go 函數(shù):func (p *Parser) Shift() []byte { var buffer []byte // TODO: return buffer}用CGO完成上面的TODO,正確的寫法是什么?我嘗試了以下方法,但它因錯(cuò)誤而崩潰:“/path/to/my/program”中的錯(cuò)誤:free():下一個(gè)大小無(wú)效(快速):0x00007f8fe0000aa0:var buffer []bytebufStr := C.CString(string(buffer))defer C.free(unsafe.Pointer(bufStr))C.parser_shift(p.Cparser, unsafe.Pointer(bufStr), C.int(8192))buffer = []byte(C.GoString(bufStr))return buffer
如何通過 CGO 從 C 函數(shù)中的內(nèi)部 void * 返回 []byte?
尚方寶劍之說(shuō)
2023-03-29 16:06:01