【发布时间】:2018-08-18 21:29:08
【问题描述】:
几年前,我不得不为 C 库创建一个 python 包装器。我对 C 的了解非常有限,但我设法创建了所需的内容。 突然一种方法开始引起问题,我唯一的猜测是它必须与 python 更新有关。
无论如何,我有以下 C 代码:
const char * myFunction()
{
return "My String";
}
DLL_EXPORT const char*
test()
{
return myFunction();
}
在我的 Python 包装器中是使用以下方法调用的:
def test(self):
ret = self.lib.test()
return c_char_p(ret).value
如前所述,这运行良好,但考虑到我最近在尝试修复它时发现的情况,我不确定为什么。
目前我在调用 test() 方法时从 python 得到“Seg Fault”。
使用这个线程:
ctypes return a string from c function
When to use malloc for char pointers
我设法修复了我现在看起来像这样的代码,c:
const char * myFunction()
{
return "My String";
}
DLL_EXPORT const char*
test()
{
const char* st = myFunction();
char *bar = _strdup(st);
return bar;
}
python 代码保持不变。如前所述,我对 C 的了解非常有限,因此很少有问题:
- 知道为什么旧的实施正在工作并突然停止了吗?是否有一些可能影响它的 python 更新?
- 为什么在我的 c test() 函数中我必须执行 _strdup(st) 并返回 bar 而不是简单地返回 st?
【问题讨论】: