【发布时间】:2020-04-11 17:54:14
【问题描述】:
我想将一个变量传递给我的 C 函数,其数据类型为 char**。
如何使用 Kotlin/Native 传递这样的变量?
换句话说,如何在 Kotlin/Native 中初始化和使用嵌套的 CPointers?
【问题讨论】:
标签: kotlin-native
我想将一个变量传递给我的 C 函数,其数据类型为 char**。
如何使用 Kotlin/Native 传递这样的变量?
换句话说,如何在 Kotlin/Native 中初始化和使用嵌套的 CPointers?
【问题讨论】:
标签: kotlin-native
根据the documentation,char** 应该映射到CPointer<CPointerVar<ByteVar>>。所以,如果你想分配一个这样的指针,这样的事情应该可以工作:
memScoped {
val charTwoStars = allocPointerTo<CPointerVar<ByteVar>>()
}
当我在 memScoped 块内分配这个变量时,这个变量可以在块中访问,一旦块结束就被释放。
【讨论】:
memScoped{}之外做到这一点?
我找到了一种可行的方法。但是,它似乎不优雅。
val tmp = "".cstr.getPointer(MemScope())
val a = listOf(tmp).toCValues().getPointer(MemScope())
【讨论】:
memScoped 块的全部意义在于保证我们的内存分配将被正确释放。如果您想创建具有更长生命周期的东西,请考虑 a) 在堆上分配或 b) 在 Arena 类实例上分配它。这两个展示位置都需要在程序结束时手动释放。 ``` val myArena=Arena() val A = nativeHeap.allocPointerTo