gpt4 book ai didi

Swift 5 : how to deallocate memory, 由共享库分配

转载 作者:行者123 更新时间:2023-12-05 02:58:25 24 4
gpt4 key购买 nike

我在共享库中有以下 C 函数:

int GetRxDataBlock( char** data )
{
CHECK_FACADE_INITIALIZATION( "getRxDataBlock : Client facade not initialized", __LINE__ );

if ( data == nullptr ) {
printErrorMsg("getRxDataBlock : nullptr", __LINE__);
return -1;
}

int ret = 0;
try {
std::string rxData = g_facade.value()->getRxDataBlock();
*data = (char*) malloc(rxData.size() + 1);
memset(*data, 0, rxData.size() + 1 );
memcpy(*data, rxData.c_str(), rxData.size());
}catch(...) {
ret = -1;
}

return ret;
}

这就是我在 Swift 代码中调用它的方式:var rxData:UnsafeMutablePointer? =无

let apiResponse = GetRxDataBlock(&rxData)
print("Rx data : ret = \(apiResponse)")

if let dataStr = rxData {
let rxStr = String(cString: dataStr)
print("Rx data = \(rxStr)")
}

释放 GetRxDataBlock 函数返回的内存的正确方法是什么?

最佳答案

malloc()ed 内存必须用 free() 释放:

if let dataStr = rxData {
// do something with `dataStr`
// ...
free(dataStr)
}

这也是 defer 的一个很好的用例,它在 block 的作用域离开之前调用闭包:

if let dataStr = rxData {
defer { free(dataStr) }
// do something with `dataStr`
// ...
}

在 Apple 平台上,free() 作为 Darwin 模块的一部分从标准 C 库中导入(由 Foundation 导入) 、AppKitUIKit)。在 Linux 上,您将导入 Glibc

关于Swift 5 : how to deallocate memory, 由共享库分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054093/

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