[問題] 陣列會爆改寫 malloc 指標的錯誤

看板C_and_CPP (C/C++)作者 (WIWI)時間14年前 (2012/05/28 13:56), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 原本的資料是 兩個txt檔 裡面都有1404*20筆的資料 我把兩個讀進 1404*20 的陣列 然後我分別把兩個乘一個權重值分別是 0.8 0.2 存進另一個1404*20的陣列 但現在新的資料進來檔案比較大 兩個txt檔都有7625*20筆的資料 直接用宣告的話會STACKFLOW 所以我改寫成用MALLOC 指標的方式 但OUTPUT的檔案7625*20 的資料都是0.0000 餵入的資料(Input): 分別都是txt 檔 裡面排列如下 -341.095 -342.589 -348.123 -342.120 -342.854 -342.286 -342.028 -343.018總共20筆 -312.678 -345.604 -342.616 -343.384 -342.889 -343.018 -342.850 -342.351總共20筆 . . . 總共 7625列 * 20行 預期的正確結果(Expected Output): 應該都會是 7625*20 的DOUBLE數 錯誤結果(Wrong Output): 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 全部都是0 程式碼(Code):(請善用置底文網頁, 記得排版) 原本用陣列 http://codepad.org/iS1FccS1 出來是正確 後來改用MALLOC 指標 http://codepad.org/xHZQ3yJa 出來都是0.000000 補充說明(Supplement): 設中斷點去看只會掃進 第一筆Q1陣列 跟 第一筆Q2陣列 還有乘 權重的Q3陣列第一筆 如果把Q3寫進去output的檔案 應該會出現Q3的第一筆資料 但看TXT檔全部都是0.000000 請各位幫我看看哪裡有問題 謝謝 : ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.72.99 ※ 編輯: wiwismily 來自: 140.124.72.99 (05/28 13:57)

05/28 14:01, , 1F
仔細想想 (Q1+i)+j) 能夠對應舊code的 Q1[i][j] 嗎?
05/28 14:01, 1F

05/28 14:02, , 2F
&(Q1+i)+j)
05/28 14:02, 2F

05/28 14:03, , 3F
如果實在是懶得malloc兩維陣列的話, 新code的Q1~3的存取
05/28 14:03, 3F

05/28 14:04, , 4F
試解: 舊code的 Q1[1][2] 與 Q1[1][3] 差幾個double?
05/28 14:04, 4F

05/28 14:05, , 5F
舊code的 Q1[1][1] 與 Q1[2][1] 又差了幾個double?
05/28 14:05, 5F

05/28 14:08, , 6F
2F打錯, 一直typo..Orz 是 (Q1+i)+j vs &Q1[i][j] ...
05/28 14:08, 6F

05/28 14:17, , 7F
7265*20*8 > 1024*1024
05/28 14:17, 7F

05/28 14:20, , 8F
1024*1024=1個分頁大小
05/28 14:20, 8F

05/28 14:29, , 9F
用VirtualAlloc連續申請幾個page來用看看
05/28 14:29, 9F

05/28 15:44, , 10F
或是考慮直接丟全域變數
05/28 15:44, 10F

05/28 19:19, , 11F
*(Q3+i*20+j)=0.8*(*(Q1+i*20+j))+0.2*(*(Q2+i*20+j));
05/28 19:19, 11F
感謝各位的幫助 我已經寫出來了: ) ※ 編輯: wiwismily 來自: 140.124.72.99 (05/29 09:13)
文章代碼(AID): #1FmnDxPO (C_and_CPP)
文章代碼(AID): #1FmnDxPO (C_and_CPP)