【发布时间】:2014-08-20 15:45:13
【问题描述】:
我希望使用一些返回多个未知大小数组的 C 代码。因为有多个数组,我想我需要使用传入的指针,我不知道如何将它与用于设置数组的 malloc 结合起来。
这是一些有代表性的C代码:
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
//gcc -fPIC -shared -o array_test_c.so array_test_c.c
void return_array(int * outdata1v, int * outdata2v) {
int i;
int N = 10;
int * mydatav2, * mydatav3;
mydatav2 = (int *) malloc(sizeof(int) * N);
mydatav3 = (int *) malloc(sizeof(int) * N);
for (i = 0; i<N; i++){
mydatav2[i] = i;
mydatav3[i] = i*2;
}
//this doesn't work which makes sense
outdata1v = mydatav2;
outdata2v = mydatav3;
}
我正在尝试通过以下方式将它与 Python 挂钩(这不起作用):
import os
import ctypes
#for c interface
test_module = ctypes.cdll.LoadLibrary(
os.path.join(os.path.dirname(__file__), './array_test_c.so'))
outdata1 = (ctypes.c_int * 0)()
outdata2 = (ctypes.c_int * 0)()
test_module.return_array(outdata1, outdata2)
outdata1 = (ctypes.c_int*10).from_address(ctypes.addressof(outdata1))
print "out", outdata1[-1], outdata1, outdata2
这不起作用,我永远无法打印出 20。有什么想法吗?
【问题讨论】:
-
能否请您发布错误或您得到的任何输出?
-
你的意思是,作为回报多个数组?你不能直接返回
int**吗? -
另外,顺便说一句,malloc 返回一个指向数据的指针,你不需要强制转换:
(int *) -
目前没有错误,只是输出错误(一些随机数)
标签: python c arrays ctypes ctype