使用附加元素处理 python-C numpy-C API 段错误

问题描述

节日快乐...

使用 Python-C numpy C-API

if (!PyArg_ParseTuple(args,"lOO!O!O!O!O!O!O!",&N,&mychunk,&PyArray_Type,&py_local_F,&py_centers,&py_normals,&py_v1,&py_v2,&py_v3,&py_areas))
    return NULL;

使用 C 程序输出的信息代码:

void print_pyfunction_info(char* name,PyArrayObject *arr)
{
  int d = PyArray_NDIM(arr);
  npy_intp N = PyArray_SIZE(arr);
  printf("Python array name=%s ndim=%i,size=%li \n",name,d,N);
}

并在 C 程序中调用此函数:

char name1[128] = "py_v1";
print_pyfunction_info(name1,py_v1);
char name2[128] = "py_v2";
print_pyfunction_info(name2,py_v2);
char name3[128]="py_v3";
print_pyfunction_info(name3,py_v3);
char name4[128]="py_centers";
print_pyfunction_info(name4,py_centers);
char name5[128]="py_normals";
print_pyfunction_info(name5,py_normals);
char name7[128]="py_local_F";
print_pyfunction_info(name7,py_local_F);

产生正确的输出:

Python array name=py_v1 ndim=2,size=120 
Python array name=py_v2 ndim=2,size=120 
Python array name=py_v3 ndim=2,size=120 
Python array name=py_centers ndim=2,size=120 
Python array name=py_normals ndim=2,size=120 
Python array name=py_local_F ndim=2,size=1600 

工作正常!

现在,附加一个对象、一个数组和一个长整数,它们完全正确地传递给 C:

if (!PyArg_ParseTuple(args,"lOO!O!O!O!O!O!O!OO!l",&py_areas,&cells,&py_rootbounds,&Ncells))
    return NULL;

信息中出现段错误(如果我使用 local_F 数组时没有要求提供信息):

char name1[128] = "py_v1";
print_pyfunction_info(name1,py_normals);
char name6[128]="py_rootbounds";
print_pyfunction_info(name6,py_rootbounds);

char name7[128]="py_local_F";
print_pyfunction_info(name7,py_local_F);

因段错误而中断:

    Python array name=py_v1 ndim=2,size=120 
    Python array name=py_v2 ndim=2,size=120 
    Python array name=py_v3 ndim=2,size=120 
    Python array name=py_centers ndim=2,size=120 
    Python array name=py_normals ndim=2,size=120 
    Python array name=py_rootbounds ndim=1,size=6 
    Fatal Python error: Segmentation fault

从Python端来看local_F也是一样,是一个40x40的数组

    local_F {} [[0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     ...
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]]

我没有资源,非常感谢任何帮助。

最好的祝福!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)