依照hw4的reference code
和老師測試的程式結果
對於new []的function
例如他allocate 到0x89b9c30 的記憶體
會顯示出 >>
Memory acquired... 0x89b9c30
return address = 0x89b9c34
所以我們return 0x89b9c34的位置回去
然而問題發生了
我猜reference code意思是說
system 會把array_size存在 0x89b9c30~0x89b9c33的4個byte裡面
所以我們必須return 0x89b9c34的address
然而經過我熬夜嘗試的結果orz
system實際上會自動再+4個byte...
所以array_size會存在 0x89b9c34~0x89b9c37的4個byte
然後vector __arrList裡存入的位置是0x89b9c38!! 可利用的大小剩8bytes..
簡單來說 new []這個function 應該是return acquired的memory address回去就好
system 會自動+4個byte...
還是...code的意思是只是cout << 0x89b9c34
但實際上還是return 0x89b9c30回去Orz....
對了
在call delete []時...pointer也會自動減4個byte..
所以如果是在new 時 return 0x89b9c30回去的話(
(_vector __arrList會存入 0x89b9c34)
那Calling free...( 0x89b9c30 ) ...會顯示這樣的結果..
換言之 應該不是顯示出 0x89b9c34...
而如果照refernce code return 0x89b9c34 回去會顯示正確
但我覺得這應該是bug...因為這樣一來記憶體空間會被再吃掉4 bytes..
(因為 _arrList會存入 0x89b9c38)
不過顯示出來都沒什麼差啦...||
只是單純覺得好像有點問題
講的不清楚的話請見諒Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.251.102
※ 編輯: Jyou 來自: 140.112.251.102 (12/03 04:47)
※ 編輯: Jyou 來自: 140.112.251.102 (12/03 04:47)