精華區beta EE_DSnP 關於我們 聯絡資訊
依照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)