如何解决C函数返回但python ctypes崩溃
我将一些c函数编译成一个dll。以下功能是一个示例:
typedef struct {
faces_array* faces_arr;
vert_array* verts_arr;
size_t added;
location3d max_values;
location3d min_values;
}mesh;
void init_mesh(mesh* m,const size_t added,const size_t initial_size){ //initial_size is added by mistake,will be deleted
printf("entered function sucessfully \n");
faces_array* faces_arr;
printf("face array \n");
faces_arr-> faces = malloc(added * sizeof(triFace));
printf("memory allocated \n");
faces_arr->capacity_faces = added;
printf("capacity changed \n");
faces_arr->num_faces = 0;
vert_array* verts_arr;
verts_arr->verts = malloc(added*sizeof(vertex));
verts_arr->capacity_verts = added;
verts_arr->num_verts = 0;
m->added = added;
m->faces_arr = faces_arr;
m->verts_arr = verts_arr;
printf("exited function sucessfully \n");
}
我使用ctypes从python调用此函数:
from ctypes import *
class mesh(Structure):
_fields_ = [
('faces_arr',POINTER(faces_array)),('verts_arr',POINTER(vert_array)),('added',c_size_t ),('max_values',location3d ),('min_values',location3d )]
libc = CDLL('./meshing.dll')
init_mesh = lib.__getattr__('init_mesh')
init_mesh.restype = None
init_mesh.argtypes = [POINTER(mesh),c_size_t,c_size_t]
m = mesh()
init_mesh(byref(m),c_size_t(100),c_size_t(100))
当我运行python脚本时,我看到最后由c函数打印的exited function sucessfully
,表明该函数可以正常工作,但是python不能继续工作,我不知道为什么发生。 (注意:我没有将所有结构都放在此处的代码中,以免问题变得太大。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。