2017-04-10 39 views
1

在Golang中如何導出返回雙精度數組的函數。它之前是可能的方式似乎回到「運行時錯誤:CGO結果具有進入指針」現在:返回雙精度數組的輸出函數

//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

謝謝。奇蹟般有效。 –