2017-04-10 8 views
1

Golangでは、double型の配列を返す関数をエクスポートする方法。それは以前に可能であった方法は、返すように見える「ランタイムエラーを:CGO結果がポインタを移動します持っている」今:double型の配列を返すエクスポート関数

//export Init 
func Init(filename string) (C.int, unsafe.Pointer) { 
    var doubles [10]float64 
    doubles[3] = 1.5 
    return 10, unsafe.Pointer(&doubles[0]) 
} 

答えて

2

を安全にCでのポインタを格納するためには、それが指すデータはC.

に割り当てる必要があります
//export Init 
func Init(f string) (C.size_t, *C.double) { 
    size := 10 

    // allocate the *C.double array 
    p := C.malloc(C.size_t(size) * C.size_t(unsafe.Sizeof(C.double(0)))) 

    // convert the pointer to a go slice so we can index it 
    doubles := (*[1<<30 - 1]C.double)(p)[:size:size] 
    doubles[3] = C.double(1.5) 

    return C.size_t(size), (*C.double)(p) 
} 
+0

ありがとうございます。魅力のように動作します。 –

関連する問題