[問題] 如何用STL創造二維矩陣

看板C_and_CPP (C/C++)作者 (老人家)時間16年前 (2009/12/08 18:59), 編輯推噓4(4036)
留言40則, 6人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 如題 希望得到的正確結果: 一個可讀可寫的二維陣列 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) BCB 有問題的code: (請善用置底文標色功能) 完全沒用過STL 也不知道BCB是否有內建函式 物件特性完全沒有了解 補充說明: 相當需要補充STL方面知識 尤其以矩陣運算為迫切需要 此次問題主要是用來解決 我BCB動態配置用到爆了 (沒錯 真的爆了 配置太多 記憶體不足) 約用了 160000*int 時 會爆掉 ...... 聽說(一切都是聽說) STL可以解決配置過大的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.64.100.1

12/08 19:01, , 1F
用new
12/08 19:01, 1F

12/08 19:02, , 2F
你new不出來的東西, 用STL一樣要記憶體, 為什麼STL就可
12/08 19:02, 2F

12/08 19:03, , 3F
以解決配置過大的問題?? mem不夠的swap機制也是OS在做輪
12/08 19:03, 3F

12/08 19:04, , 4F
不到STL管啊XD 要嘛改變你的資料結構/演算法, 一次只拿
12/08 19:04, 4F

12/08 19:04, , 5F
馬上要用到的data來算. 另一個, 去改一下BCB對該project
12/08 19:04, 5F

12/08 19:04, , 6F
樓樓上跟樓上 都誤會了 動態NEW的出來 但跑不過
12/08 19:04, 6F

12/08 19:04, , 7F
允許的stack/heap大小, 這我記得BCB6可以直接設, 雖然還
12/08 19:04, 7F

12/08 19:05, , 8F
是有個上限, 但是才0x9C400應該是夠塞得下....
12/08 19:05, 8F

12/08 19:06, , 9F
什麼叫new的出來跑不過, new的出來這些記憶體就是可以用
12/08 19:06, 9F

12/08 19:06, , 10F
的; 不要new這麼大就可以跑過, 就表示你new太多了OS給不
12/08 19:06, 10F

12/08 19:06, , 11F
了你...~_~
12/08 19:06, 11F

12/08 19:10, , 12F
沒錯 new太多了 但BCB在刪除配置有根本問題
12/08 19:10, 12F

12/08 19:11, , 13F
160000 int ? 這還蠻小的啊
12/08 19:11, 13F

12/08 19:11, , 14F
我確信 160000*int 是ok的 但BCB跑不過是內部缺陷
12/08 19:11, 14F

12/08 19:12, , 15F
此缺陷是關於刪除記憶體瑕疵 以至於配置新陣列會錯
12/08 19:12, 15F

12/08 19:12, , 16F
這個問題我碰過很多次了 可以參見我過去回應
12/08 19:12, 16F

12/08 19:12, , 17F
我看不懂你的中文 = =...`刪除記憶體瑕疵`... ?
12/08 19:12, 17F

12/08 19:13, , 18F
必須用可乾淨 配置+刪除的新方法
12/08 19:13, 18F

12/08 19:16, , 19F
可參見文章 #19Z_qgBQ 中回應串
12/08 19:16, 19F

12/08 19:17, , 20F
12/08 19:17, 20F

12/08 19:17, , 21F
PcGrek:個人推測是compiler在 delete[] 時發生異常。
12/08 19:17, 21F

12/08 19:18, , 22F
雖然我後來用P大的方法解決了 不過類似的問題仍會出現
12/08 19:18, 22F

12/08 19:18, , 23F
而P大提到他改用STL宣告陣列就不再發生了
12/08 19:18, 23F

12/08 19:18, , 24F
vector<vector<int> > a;
12/08 19:18, 24F

12/08 19:19, , 25F
所以你是推斷BCB的delete[]在處理new來大array時有bug所
12/08 19:19, 25F

12/08 19:19, , 26F
所以我想統一把陣列更改成STL內部函式
12/08 19:19, 26F

12/08 19:19, , 27F
以想改用STL, 老實說我看到現在才看懂你的問題....
12/08 19:19, 27F

12/08 19:20, , 28F
12/08 19:20, 28F

12/08 19:20, , 29F
you may have to drop the god damn BCB.
12/08 19:20, 29F

12/08 19:21, , 30F
re-factoring the project with QT/GTK.
12/08 19:21, 30F

12/08 19:21, , 31F
只是, 我記得vector也是兩倍兩倍的往上開array, 歸還時
12/08 19:21, 31F

12/08 19:21, , 32F
底層的free/delete應該還是call一樣的API, 所以我不覺得
12/08 19:21, 32F

12/08 19:22, , 33F
STL就可以解決問題, 除非你換掉memory managemet的相關
12/08 19:22, 33F

12/08 19:22, , 34F
簡單的說 如果STL vector可以正常work, 就一定是src有問題
12/08 19:22, 34F

12/08 19:22, , 35F
library; 用STL沒爛掉也許只是像vector這種實作時不會馬
12/08 19:22, 35F

12/08 19:23, , 36F
上還掉, 所以剛好沒遇到吧?? 不過以前用BCB6是真的有遇
12/08 19:23, 36F

12/08 19:23, , 37F
到它自己的bug, 穩定性是有點OTZ....orz
12/08 19:23, 37F

12/08 19:24, , 38F
OTZ := Oh! TAMA 'd Zang
12/08 19:24, 38F

12/10 09:22, , 39F
Compiler 參數裡面的 Heap Size 調整一下就好了....
12/10 09:22, 39F

12/10 09:23, , 40F
BCB 有記憶體大小上限 不過是可以調整的
12/10 09:23, 40F
文章代碼(AID): #1B7Z6SqV (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B7Z6SqV (C_and_CPP)