看板 EE_DSnP 關於我們 聯絡資訊
如果是 int a[5]; 則sizeof(a) = 20 =4*sizeof(int) 但在memMgr.h的freeArr裡面,傳入的p應該是一個T的array 但sizeof(p) = 4 = sizeof(T*) 看來這招不能用。請問還有什麼方法可以知道array的大小呢? -- 春苑樹雪菜萌苗,雀兒喜上夏枝梢;藍眼望盡黃泉路,只盼儷人一美笑長巾初解投送抱,金珠麗葉賀新好;神代仙眷且羨嫉,長伴相隨誓到老。 靜馬千華留秋晚,冬風不止三鄉道;紅枝立約攜手情,今此空餘泣嚎啕。 姬宮千歌音悠悠,櫻井奏樂聲裊裊;奈何天令伊人變,飛離斯愛離斯去。 結城AIRA→ 悲慟獨泣無人應,白晝夢盡皆空語。 ←美鄉あき Kalafina→ 紅月旋響戚音樂,黯然步上鎮魂旅 ←飛 蘭 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.147.96
inferior9527:同樣問題... 11/15 16:23
wmin0:去拿系統偷放的那個值 11/15 16:36
victoret:我想請問的是那個值占多少記憶體? 11/15 21:36
victoret:或者說,他是不是 size_t 的形式存放? 11/15 21:37
victoret:很好奇這個值在 32 bit 和 64 bit 裡面占的空間是否有差 11/15 21:37
e124553423:好像是這樣沒錯吧? 11/15 22:49
TommyKSHS:會以 size_t 存放喔 11/16 00:17
Komemushisp:問一下 *(size_t*)(p-sizeof(size_t)) 這樣寫對嗎?? 11/16 00:29
TommyKSHS:傳進 freeArr (前身:傳進 delete) 裡的 array pointer 11/16 00:39
TommyKSHS:其實就已經是指向存那個值的位置了,所以不用減後面那坨 11/16 00:40
Komemushisp:噢噢 謝謝!! 11/16 00:46
victoret:感謝!!! 11/16 01:01
結果問的人自己還是看不懂推文是什麼意思... ※ 編輯: takua624 來自: 140.112.25.107 (11/16 07:46) 好,現在勉強懂了,總之經過謎一般的dereference,可以得到*p就是array size 但是,把他加到例如size=2的list好了,如果裡面原本的_first指著一個0x0000 那麼...根據這個list的使用方式,我們會把_first指向p,而*p = 0x0000 這樣...下次再delete[]一次p的時候,要去讀他的array size就會變成 0x0000強制轉譯成size_t之後的結果,然後就______了 這樣的話要怎麼應付重複delete[]的問題呢? ※ 編輯: takua624 來自: 140.112.4.195 (11/16 15:19) ※ 編輯: takua624 來自: 140.112.4.195 (11/16 15:20)
shryuhuai:你把不同的東西搞混了,_first和delete沒有關係啊 11/16 20:04