c++调用python函数时,使用PyArray_SimpleNewFromData(nd, dims, typenum, data)函数时出现内存错误的问题
示例程序:
int main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pArgs,*pXVec,*c, *xarr1;
int i;
float fArray[] = {,,,,};
npy_intp m[1] = {5};// Initialize the Python Interpreter
Py_Initialize();
PySys_SetArgv(argc, argv);
// Build the name object
pName = PyString_FromString(argv[]); // Load the module object
pModule = PyImport_Import(pName);
printf("check0\n");
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
printf("check1\n");
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, argv[]);
printf("check2\n"); c = PyArray_SimpleNewFromData(,m,NPY_FLOAT,fArray);
printf("check3\n");
pArgs = PyTuple_New();
PyTuple_SetItem(pArgs,, c); pValue = PyObject_CallObject(pFunc, pArgs); if (pArgs != NULL)
{
Py_DECREF(pArgs);
} // Clean up
Py_DECREF(pModule);
Py_DECREF(pName); // Finish the Python Interpreter
Py_Finalize(); return ;
}
运行时出现以下错误:
解决方法:在Py_Initialize()后加入“import_array()”语句即可。
Py_Initialize();
import_array();
注意:当编译"import_array()"时,可能会出现以下错误:
解决方法:在自己安装的python目录中搜索"object.h"文件,将其56行"#define Py_REF_DEBUG"语句注释掉即可。
c++调用python函数时,使用PyArray_SimpleNewFromData(nd, dims, typenum, data)函数时出现内存错误的问题的更多相关文章
- 嵌入Python系列 | 调用Python模块中无参数函数
开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...
- python - Linux C调用Python 函数
1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...
- 嵌入Python | 调用Python模块中无参数的函数
开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...
- 嵌入Python | 调用Python模块中有参数的函数
开发环境Python版本:3.6.4 (32-bit)编辑器:Visual Studio CodeC++环境:Visual Studio 2013 需求说明前一篇<在C++中嵌入Python|调 ...
- C++多线程中调用python api函数
错误场景:一直等待全局锁. 解决方法: 一.首先定义一个封装类,主要是保证PyGILState_Ensure, PyGILState_Release配对使用,而且这个类是可以嵌套使用的. #inclu ...
- 使用shell调用python中的函数
最近遇到一个需求,需要通过shell调用python中的一个函数,发现其实也挺简单的: python脚本如下: test.py: import ConfigParser config = Config ...
- matlib调用python时转py格式为matlib格式
因为需要,我用matlib调用python代码. 调用成功但是遇到问题 如下 调用完的结果为python格式 (py.list,py.xx) matlib根本不能用 查了半天一个能解决的方法都没 ...
- 【Python五篇慢慢弹(3)】函数修行知python
函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- PHP 调用Python脚本
上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...
随机推荐
- 为Drupal7.22添加富编辑器 on Ubuntu 12.04
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 基本上就是按照Drupal7宝典里描述的进行设置的. 1. 下载wysiwyg 2. ...
- 使用Openssl创建证书
概述 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏: ...
- 征服 Ajax 应用程序的安全威胁
Ajax 构建于动态 HTML(DHTML)技术之上,其中包括如下这些最常见的技术: JavaScript :JavaScript 是一种脚本语言,在客户端 Web 应用程序中经常使用. 文档对象模型 ...
- js setInterval()函数 [倒计时用]
定义和用法: setInterval() 方法用于在指定的毫秒数后调用函数或计算表达式.它与setTimeout()方法不同的是前者可以无限的循环,不会受调用函数的限制,要想退出此循环可 ...
- Effective JavaScript Item 37 认识this的隐式指向
本系列作为Effective JavaScript的读书笔记. CSV数据通常都会被某种分隔符进行分隔.所以在实现CSV Reader时,须要支持不同的分隔符.那么,非常自然的一种实现就是将分隔符作为 ...
- Source Insight 项目简单使用说明
SI(Source Insight) 是我一直写代码的好伙伴, 相信这强大的软件也是广大程序猿编写软件的利器. 正所谓" 工欲善其事, 必先利其器", 我们要学会利用这款软件. 先 ...
- 使用Django框架
1.安装Django 在命令行模式下使用pip工具来安装Django,pip工具的安装方法见此篇 pip install django 2.确认是否安装成功 在Python交互模式下 import d ...
- CCNA2.0笔记_IP连接排错
IPv4 路由排错 ping tracert traceroute telnet show mac address-table show interfaces fastEthernet 0/1 sho ...
- linux学习笔记15--命令locater、slocate
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...
- C#调用C++dll文件 运行提示找不到函数的入口点
1.首先用DllAnalyzer查看dll的输出函数名,发现输出的函数名有所变化,多了@xxx和一些别的奇怪的字符,实际上是因为C++重载机制造成的,使用使用extern "C"关 ...