作者takua624 (TAKUA)
看板EE_DSnP
標題[問題] 要怎麼知道array size?
時間Tue Nov 15 16:08:36 2011
如果是
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
1F:推 inferior9527:同樣問題... 11/15 16:23
2F:推 wmin0:去拿系統偷放的那個值 11/15 16:36
3F:推 victoret:我想請問的是那個值占多少記憶體? 11/15 21:36
4F:→ victoret:或者說,他是不是 size_t 的形式存放? 11/15 21:37
5F:→ victoret:很好奇這個值在 32 bit 和 64 bit 裡面占的空間是否有差 11/15 21:37
6F:→ e124553423:好像是這樣沒錯吧? 11/15 22:49
7F:推 TommyKSHS:會以 size_t 存放喔 11/16 00:17
8F:推 Komemushisp:問一下 *(size_t*)(p-sizeof(size_t)) 這樣寫對嗎?? 11/16 00:29
9F:→ TommyKSHS:傳進 freeArr (前身:傳進 delete) 裡的 array pointer 11/16 00:39
10F:→ TommyKSHS:其實就已經是指向存那個值的位置了,所以不用減後面那坨 11/16 00:40
11F:推 Komemushisp:噢噢 謝謝!! 11/16 00:46
12F:推 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)
13F:推 shryuhuai:你把不同的東西搞混了,_first和delete沒有關係啊 11/16 20:04