[问题] 计算两个二维阵列的乘积,但无法释放记

楼主: yuwenche (yuwenche)   2023-09-23 09:41:57
底下连结的程式片段是计算两个二维阵列的乘积,此函式会被编译成dll档,供python程
式调用。 目前的情况是能传回正确的乘积值,但因第45行之后未被执行,也就是宣告的
内存空间未被释放,程式跑久就出现内存不足的问题了。请问有没有办法传回正确值
且能释放内存?
https://drive.google.com/file/d/1IdiUiNmFEVAb3AQfoEk3_20MDrDidO2o/view?usp=sharing
作者: LPH66 (-6.2598534e+18f)   2023-09-23 10:11:00
注意你 40 行已经 return 了return 不只是表示什么是回传值, 更表示程式执行到此为止
作者: lycantrope (阿宽)   2023-09-23 14:37:00
不过就算return放在最后一行,这code也是www
作者: stupid0319 (征女友)   2023-09-23 15:08:00
把结果转成字串,存在固定空间, python 处理字串
作者: lycantrope (阿宽)   2023-09-23 15:59:00
直接转成numpy回传就好,转字串不如别用c
作者: CoNsTaR ((const *))   2023-09-23 23:14:00
不能在 Python 那边 allocate 好再把阵列传进来吗?
楼主: yuwenche (yuwenche)   2023-09-26 11:42:00
感谢各位的建议,虽然此题目前仍无解。只好先用纯python来解了,虽然速度上是慢了点。
作者: lycantrope (阿宽)   2023-09-26 13:44:00
#1b3a9dxv (C_and_CPP),两年前类似问题....
作者: yvb   2023-09-27 18:22:00
楼上, 你贴的是本篇文章代码耶...
作者: lycantrope (阿宽)   2023-09-27 22:38:00
我贴错应该是#1XRgBGl_ (C_and_CPP)
作者: lc85301 (pomelocandy)   2023-09-28 00:00:00
不一样啦,这次有 python 呀
作者: tomsawyer (安安)   2023-09-29 23:46:00
应该妳得拿到pointer后 又再呼叫一个free 的function定义在dll里去释放他
作者: closer76 (克楼瑟)   2023-09-30 10:50:00
我有个想法:如果你能在 Python 里处理这个被回传的指标那你能不能再写一个 C 的函式,专门做 free(),然后在Python 里呼叫这个函式去释放内存?
作者: LPH66 (-6.2598534e+18f)   2023-09-30 23:16:00
其实楼上的做法不只是给 python, 它甚至是一般写 DLL 时的做法: 当 DLL 有获取资源的动作时, 一定也有一个释放资源的函数, 这样需求跟释放都会在 DLL 里
楼主: yuwenche (yuwenche)   2023-10-03 18:41:00
感谢楼上两位的意见,其实这方法我也试过,只不过程式在执行时发生错误。能把构想程式化吗? 如果对python不熟,就在C语言的main()中调用即可,感谢。
作者: lycantrope (阿宽)   2023-10-03 21:58:00
先学写C再去想python,再说有numpy为何不用

Links booklink

Contact Us: admin [ a t ] ucptt.com