gpt4 book ai didi

swift - 使用 Float 数组在 Swift 中调用 "realloc"的正确方法?

转载 作者:搜寻专家 更新时间:2023-10-31 22:52:38 25 4
gpt4 key购买 nike

当我通过 Swift 调用它时,我正在尝试确定发送“realloc”的大小。 看来我要多加一个字节,但我不明白为什么。

typealias Floats = UnsafeMutablePointer<Float>

let FLOAT_SIZE = sizeof( Float )

func floats_realloc( floats:Floats, qty_of_floats:Int ) -> Floats {

let KLUDGE = 1 // Why?

let qty_of_bytes = ( qty_of_floats * FLOAT_SIZE ) + KLUDGE

let realloced_floats = Floats(

realloc( floats, UInt( qty_of_bytes ) )

)

return realloced_floats

}

如果我在这里将 KLUDGE 设置为 0,当我尝试为三成员数组中的一个新成员腾出空间时会发生这种情况:

在:[0.9, 0.9, 0.9]

输出:[0.0, 0.0, 0.9, 0.0]

我期望的是:

输出:[0.9, 0.9, 0.9, 0.0]

我发送的数组是在 Swift 中创建的,使用

var foo_floats = Floats.alloc(QTY_OF_FLOATS)

我对 realloc 的调用有什么问题?

最佳答案

我已经在 Apple 的开发者论坛上讨论过这个问题。事实证明,使用 Swift 的 alloc 为 Swift 数组而不是 C 数组分配空间。因此,如果您想将 MutableUnsafePointer 用于 C 数组和“realloc”(从 C 桥接),您需要坚持使用 C 函数,例如“malloc”(从 C 桥接)。

通过添加以下函数,并在我最初设置 Floats 数组时使用它,“realloc”错误消失了:

func floats_alloc( qty_of_floats:Int ) -> Floats  {

// return Floats.alloc( qty_of_floats )

let qty_of_bytes = ( qty_of_floats * FLOAT_SIZE )

let alloced_floats = Floats(

malloc( UInt( qty_of_bytes ) )

)

return alloced_floats

}

我已经测试了几个星期了,一切正常。

关于swift - 使用 Float 数组在 Swift 中调用 "realloc"的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com