[問題] 計算兩個二維陣列的乘積,但無法釋放記

看板C_and_CPP (C/C++)作者 (yuwenche)時間1年前 (2023/09/23 09:41), 編輯推噓5(5019)
留言24則, 9人參與, 1年前最新討論串1/1
底下連結的程式片段是計算兩個二維陣列的乘積,此函式會被編譯成dll檔,供python程 式調用。 目前的情況是能傳回正確的乘積值,但因第45行之後未被執行,也就是宣告的 記憶體空間未被釋放,程式跑久就出現記憶體不足的問題了。請問有沒有辦法傳回正確值 且能釋放記憶體? https://drive.google.com/file/d/1IdiUiNmFEVAb3AQfoEk3_20MDrDidO2o/view?usp=sharing -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.46.142 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1695433319.A.EF9.html

09/23 10:11, 1年前 , 1F
注意你 40 行已經 return 了
09/23 10:11, 1F

09/23 10:11, 1年前 , 2F
return 不只是表示什麼是回傳值, 更表示程式執行到此為止
09/23 10:11, 2F

09/23 14:37, 1年前 , 3F
不過就算return放在最後一行,這code也是www
09/23 14:37, 3F

09/23 15:08, 1年前 , 4F
把結果轉成字串,存在固定空間, python 處理字串
09/23 15:08, 4F

09/23 15:59, 1年前 , 5F
直接轉成numpy回傳就好,轉字串不如別用c
09/23 15:59, 5F

09/23 23:14, 1年前 , 6F
不能在 Python 那邊 allocate 好再把陣列傳進來嗎?
09/23 23:14, 6F

09/26 11:42, 1年前 , 7F
感謝各位的建議,雖然此題目前仍無解。只好先用純python
09/26 11:42, 7F

09/26 11:44, 1年前 , 8F
來解了,雖然速度上是慢了點。
09/26 11:44, 8F

09/26 13:44, 1年前 , 9F
#1b3a9dxv (C_and_CPP),兩年前類似問題....
09/26 13:44, 9F

09/27 18:22, 1年前 , 10F
樓上, 你貼的是本篇文章代碼耶...
09/27 18:22, 10F

09/27 22:38, 1年前 , 11F
我貼錯應該是#1XRgBGl_ (C_and_CPP)
09/27 22:38, 11F

09/28 00:00, 1年前 , 12F
不一樣啦,這次有 python 呀
09/28 00:00, 12F

09/29 23:46, 1年前 , 13F
應該妳得拿到pointer後 又再呼叫一個free 的function
09/29 23:46, 13F

09/29 23:46, 1年前 , 14F
定義在dll裡去釋放他
09/29 23:46, 14F

09/30 10:50, 1年前 , 15F
我有個想法:如果你能在 Python 裡處理這個被回傳的指標
09/30 10:50, 15F

09/30 10:51, 1年前 , 16F
那你能不能再寫一個 C 的函式,專門做 free(),然後在
09/30 10:51, 16F

09/30 10:51, 1年前 , 17F
Python 裡呼叫這個函式去釋放記憶體?
09/30 10:51, 17F

09/30 23:16, 1年前 , 18F
其實樓上的做法不只是給 python, 它甚至是一般寫 DLL 時
09/30 23:16, 18F

09/30 23:17, 1年前 , 19F
的做法: 當 DLL 有獲取資源的動作時, 一定也有一個釋放資源
09/30 23:17, 19F

09/30 23:17, 1年前 , 20F
的函數, 這樣需求跟釋放都會在 DLL 裡
09/30 23:17, 20F

10/03 18:41, 1年前 , 21F
感謝樓上兩位的意見,其實這方法我也試過,只不過程式在
10/03 18:41, 21F

10/03 18:45, 1年前 , 22F
執行時發生錯誤。能把構想程式化嗎? 如果對python不熟,
10/03 18:45, 22F

10/03 18:47, 1年前 , 23F
就在C語言的main()中調用即可,感謝。
10/03 18:47, 23F

10/03 21:58, 1年前 , 24F
先學寫C再去想python,再說有numpy為何不用
10/03 21:58, 24F
文章代碼(AID): #1b3a9dxv (C_and_CPP)
文章代碼(AID): #1b3a9dxv (C_and_CPP)