作者yuwenche (yuwenche)
看板C_and_CPP
标题[问题] 计算两个二维阵列的乘积,但无法释放记
时间Sat Sep 23 09:41:57 2023
底下连结的程式片段是计算两个二维阵列的乘积,此函式会被编译成dll档,供python程
式调用。 目前的情况是能传回正确的乘积值,但因第45行之後未被执行,也就是宣告的
记忆体空间未被释放,程式跑久就出现记忆体不足的问题了。请问有没有办法传回正确值
且能释放记忆体?
https://drive.google.com/file/d/1IdiUiNmFEVAb3AQfoEk3_20MDrDidO2o/view?usp=sharing
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.46.142 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1695433319.A.EF9.html
1F:推 LPH66: 注意你 40 行已经 return 了 09/23 10:11
2F:→ LPH66: return 不只是表示什麽是回传值, 更表示程式执行到此为止 09/23 10:11
3F:→ lycantrope: 不过就算return放在最後一行,这code也是www 09/23 14:37
4F:→ stupid0319: 把结果转成字串,存在固定空间, python 处理字串 09/23 15:08
5F:→ lycantrope: 直接转成numpy回传就好,转字串不如别用c 09/23 15:59
6F:推 CoNsTaR: 不能在 Python 那边 allocate 好再把阵列传进来吗? 09/23 23:14
7F:→ yuwenche: 感谢各位的建议,虽然此题目前仍无解。只好先用纯python 09/26 11:42
8F:→ yuwenche: 来解了,虽然速度上是慢了点。 09/26 11:44
10F:→ yvb: 楼上, 你贴的是本篇文章代码耶... 09/27 18:22
12F:推 lc85301: 不一样啦,这次有 python 呀 09/28 00:00
13F:→ tomsawyer: 应该你得拿到pointer後 又再呼叫一个free 的function 09/29 23:46
14F:→ tomsawyer: 定义在dll里去释放他 09/29 23:46
15F:推 closer76: 我有个想法:如果你能在 Python 里处理这个被回传的指标 09/30 10:50
16F:→ closer76: 那你能不能再写一个 C 的函式,专门做 free(),然後在 09/30 10:51
17F:→ closer76: Python 里呼叫这个函式去释放记忆体? 09/30 10:51
18F:推 LPH66: 其实楼上的做法不只是给 python, 它甚至是一般写 DLL 时 09/30 23:16
19F:→ LPH66: 的做法: 当 DLL 有获取资源的动作时, 一定也有一个释放资源 09/30 23:17
20F:→ LPH66: 的函数, 这样需求跟释放都会在 DLL 里 09/30 23:17
21F:→ yuwenche: 感谢楼上两位的意见,其实这方法我也试过,只不过程式在 10/03 18:41
22F:→ yuwenche: 执行时发生错误。能把构想程式化吗? 如果对python不熟, 10/03 18:45
23F:→ yuwenche: 就在C语言的main()中调用即可,感谢。 10/03 18:47
24F:→ lycantrope: 先学写C再去想python,再说有numpy为何不用 10/03 21:58