python调用.a或.dll库的运行结果异常的问题记录

问题复述:

博主有个对外的c库,封成.a或.dll库文件以后对外开放,使用ctypes实现对库文件的调用,最早发现①计算过程老是没结束的就异常退出,解决以后,现在又发现②不同的python版本调用库的计算结果不同,如Python3.8.10和Python3.8.19的运行结果完全不同。


解决方案:

  • 问题①:计算过程没结束就异常退出

    • 问题分析:当时为了最大程度的简化python的接口封装复杂度,在C中使用了一些全局变量,后来发现Python有个自动内存管理机制,每隔一段时间会自动释放掉这些内存,进而导致了异常退出的问题。
    • 解决方案:将全局变量封装在某个结构体中,放在python中管理,通过传地址的方式传到算法中。
  • 问题②:不同的python版本调用库的计算结果不同

    • 问题分析:检查算法发现无全局变量的存在,排除了全局变量的问题,利用打印大法最终追踪到数据异常的地方,发现出问题的地方,C使用malloc申请了内存,所以应该是申请的内存还没用完,就被Python给释放掉了,修改成确定的数组后,发现问题解决。
    • 解决方案:干掉malloc等方式的操作,直接使用确定的数组代替。
      在这里插入图片描述

总结: Python封装接口时,务必要注意C语言中尽可能的避免掉全局变量内存操作

小声BB: 使用其他语言封装成python接口,是真坑🕳…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 任务调度 c# TaskScheduler

摘要 在C#中,TaskScheduler是一种非常有用的功能,它允许您在指定的时间或间隔内执行任务。TaskScheduler是一个抽象类,它提供了一个通用的方法来计划和执行任务。您可以使用TaskScheduler来调度多个任务,并且在多线程环境中控制它…

邮件自动推送技术如何实现?有哪些优劣势?

邮件自动推送怎么设置?如何评估邮件自动推送的效果? 邮件自动推送是一种高效的电子邮件营销和通信技术,它能够根据预设条件自动发送邮件给特定的收件人。AokSend将深入探讨邮件自动推送技术的实现原理和注意事项。 邮件自动推送&#xff1a…

【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录 核心数据类型深入探索 基础数值与文本类型 日期与时间类型 特殊与复合类型 JSON与HSTORE 表的创建、修改与管理 创建与修改表结构 索引与性能优化 约束与数据完整性 核心数据类型深入探索 PostgreSQL以其多样化的数据类型著称,不仅包括标准SQL数据类型…

使用可蒸发的电介质流体冷却IGBT

每天一篇行业发展资讯,让大家更及时了解外面的世界。 更多资讯,请关注B站/公众号【莱歌数字】,有视频教程~~ 电子系统的单相液冷却已经广泛应用了50多年。 流体广泛应用于不同的工业:电力电子中的介质油;企业服务器…

微软Win10 22H2六月更新补丁KB5039299来了!附完整更新日志

系统之家于6月26日发出最新报道,微软为 Windows 10 用户发布了六月的安全更新补丁KB5039299。22H2用户升级系统后,会发现版本号升至 19045.4598。此次更新针对影响任务栏上应用跳转列表、默认日语输入法编辑器等多个问题进行修复。接下来跟随小编看看此次…

红酒哲学:品味流转时光,探寻生活之深邃奥秘

在繁华的都市中,我们时常被各种声音和色彩所包围,追求着速度与激情。然而,在这喧嚣之中,总有那么一刻,我们渴望静下心来,品味一份不同的宁静与深度。这时,一杯雷盛红酒便成了我们与内心对话的桥…

免费分享:中国1:250万地质图(附下载方法)

中国1:250万地质图反映了中国区域地质构造面貌和基本特征,表示了中国区域地质的特色,地质编图的标准化程度较高,地质图的编制过程中充分采用了信息技术,反映了地质调查与科研的若干新进展与认识。 数据简介 本数据为空…

lmdeploy部署chatglm3模型并对话

lmdeploy部署chatglm3模型并对话 环境准备创建虚拟环境安装组件下载模型 chat启动模型并对话启动成api_server服务并对话启动成gradio服务 环境准备 使用30% A100 来运行chatglm3模型,采用lmdeploy来启动。 创建虚拟环境 # 创建虚拟环境 conda create -n langcha…

node初始化设置(简单高效)

npm config set prefix "E:\nodejs\node_global" npm config set cache "E:\nodejs\node_cache" 我比较喜欢实用nrm,所以直接指定了nrm的路径

中国历史气象灾害预警数据集

中国历史气象灾害、预警风险区数据,包括:雷暴预警、大雾预警、洪涝风险、地质灾害趋势预测分区、山洪风险、森林火险、暴雨范围、大雨范围、地质风险、高温风险、低温冻害灾情、低温冷害和雪灾等。属性表包括各预警类型、具体时间、时效等。数据从国家突…

【八股系列】探索响应式布局的奥秘:关键技术与实战代码示例

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?】 🎠 …

使用 Elastic ELSER 和 Llama3 的 RAG(使用 Langchain)

在之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG”,我们讲到了如何使用 Liama3 来结合 Elastic ELSER 来进行 RAG。在今天的文章里,我们来详细使用一个 notebook 来展示如何在本地 Elasticsearch 部署中进行实现。 此交互式 notebook 使用 Langch…

人工智能在医学图像分割中的最新研究进展|顶刊速递·24-06-26

小罗碎碎念 今日推文主题——人工智能在医学图像分割领域中的最新研究进展。 今天的推文都来自同一个期刊——《Med Image Anal 》,最新的IF是10.7。 小罗观点 今天的六篇文献都是直接面向实际应用场景的,可以针对你自己的研究课题选择合适的文章进行阅读…

【学习】科大睿智解读ITSS通过后仍需关注和改进IT服务的原因

为了确保IT服务的质量和效率,很多企业拿到ITSS资质证书后,仍然需要持续关注和改进IT服务,科大睿智总结主要原因有以下几点: 1、随着企业发展业务和市场行情的变化,可能涉及到运维服务中新的业务流程、技术需求或者用户…

机器学习算法(三):支持向量机(SVM)的sklearn调用

文章目录 前言一 理论1 sklearn中的核函数形式二、sklearn调用1 svm.SVC() 接口说明三 、具体示例1、简单的线性SVM例子 --- 不同C值的影响(1) 数据集(2) svm sklearn调用2、高斯核函数的SVM --- 非线性分类(1) 数据集(2) 高斯核函数的SVM3、sklearn调参技术--网格搜索…

华为云x86架构下部署mysql

华为云x86架构下部署mysql 1. 配置X86架构ESC2. 查看本系统中有没有安装mariadb相关的组件,有则卸载3. 安装mysql4. 启动mysql5. 登录MySQL,修改密码,开放访问权限 1. 配置X86架构ESC 2. 查看本系统中有没有安装mariadb相关的组件&#xff0c…

从理论到实践:工业工厂室外可燃气体报警器的校准方法

随着工业工厂对安全生产要求的不断提高,可燃气体报警器作为防范火灾、爆炸事故的重要设备,其准确性和可靠性显得尤为重要。 特别是在室外环境中,由于气候条件多变、设备老化等因素的影响,可燃气体报警器的性能可能会发生变化。因…

grpc学习golang版( 二、入门示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 文章目录 一、环境二、编写protobuf文件三、编写server服务端四、编写服务端五、测试 一、环境 确保环境已经配置完成,效果如下。不同环境可能导致后续生成的效果不一。 go version protoc --version…

深度解析:ChatGPT是如何理解和生成自然语言文章的?

引言 随着人工智能的发展,ChatGPT作为一种先进的自然语言处理工具,正逐渐改变人们与技术交互的方式。那么,ChatGPT是如何理解和生成自然语言文章的?本文将从其技术原理、训练过程、实际应用等多个角度,深入解析这一过…

49、基于归一化感知器的输入向量分类(matlab)

1、基于归一化感知器的输入向量分类的原理及流程 归一化感知器是一种分类算法,其原理基于感知器算法,但是在输入向量上进行了归一化处理,以提高算法的性能和稳定性。 流程如下: 输入向量归一化:对每个输入向量进行归…