[問題] 二維動態陣列

看板C_and_CPP (C/C++)作者 (無限迴圈)時間15年前 (2011/06/03 16:04), 編輯推噓3(3016)
留言19則, 6人參與, 最新討論串1/1
問題描述: 陣列裡的值不正確 我宣告了一個二維動態陣列如下 VNU_NR=2; DC_MAX=1000; FIFO_LLR = (double **)malloc(VNU_NR*sizeof(double*)+sizeof(double)*VNU_NR*DC_MAX); for(i=0, FIFO_LLR_DATA=(double *)(FIFO_LLR+VNU_NR);i<VNU_NR;i++, FIFO_LLR_DATA+=DC_MAX) FIFO_LLR[i] = FIFO_LLR_DATA; 然後初始值我給定為 for(i=0;i<VNU_NR;i++) { for(j=0;j<DC_MAX;j++) FIFO_LLR[i][j] = j; } 接著我將陣列裡的值做shift for(j=DC_MAX;j>0;j--) FIFO_LLR[0][j] = FIFO_LLR[0][j-1]; for(j=DC_MAX;j>0;j--) FIFO_LLR[1][j] = FIFO_LLR[1][j-1]; FIFO_LLR[0][0] = FIFO_LLR[1][0] = -1; 但發現FIFO_LLR[1][1]的值是999而不是0 不知道是哪裡出錯了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.55.253

06/03 16:43, , 1F
我也不知道你的VNU_NR和DC_MAX的值,誰會知道哪裡出錯?
06/03 16:43, 1F

06/03 16:43, , 2F
在最上面不是嗎 XD
06/03 16:43, 2F

06/03 16:45, , 3F
= =Sorry
06/03 16:45, 3F

06/03 16:48, , 4F
已經assign -1到FIFO_LLR[1][0],列出來是999?
06/03 16:48, 4F

06/03 16:49, , 5F
改成這樣看看for(j=DC_MAX - 1;j>0;j--)
06/03 16:49, 5F

06/03 16:49, , 6F
FIFO_LLR[0][j] // j從1000開始沒問題嗎?
06/03 16:49, 6F

06/03 16:56, , 7F
我發覺到一個問題…你為何要用動態配置記憶體去做FIFO?
06/03 16:56, 7F

06/03 17:01, , 8F
在第一個迴圈裡,你是否變更了記憶體的位址?
06/03 17:01, 8F

06/03 17:05, , 9F
(動態配置記憶體)!=(動態陣列)
06/03 17:05, 9F

06/03 17:09, , 10F
johnhmj,他這種做法是避免記憶體碎片化和free只要一次
06/03 17:09, 10F

06/03 17:16, , 11F
啊..sorry 應該是FIFO[1][1]的值是999而不是0
06/03 17:16, 11F
※ 編輯: microphonem 來自: 140.113.212.116 (06/03 17:16)

06/03 17:18, , 12F
答案已經給了,try try看吧
06/03 17:18, 12F

06/03 17:29, , 13F
ok了 我沒注意到j要從DC_MAX-1開始 sorry
06/03 17:29, 13F

06/03 17:33, , 14F
我也常常在細節地方,鬼打牆.麻煩到同事
06/03 17:33, 14F

06/03 23:07, , 15F
名詞都出來了, 弄個ADT提供介面存取, 做邊界檢查
06/03 23:07, 15F

06/03 23:08, , 16F
都不會有這種問題, 你的程式碼很亂...
06/03 23:08, 16F

06/04 13:17, , 17F
版主ADT是什麼? 可以指點一下迷津嗎?
06/04 13:17, 17F

06/05 16:37, , 18F
abstract data type 自己Wiki一下
06/05 16:37, 18F

06/06 21:56, , 19F
TaT
06/06 21:56, 19F
文章代碼(AID): #1Dw9Lzj5 (C_and_CPP)
文章代碼(AID): #1Dw9Lzj5 (C_and_CPP)