作者Jyou (徵跟我一样穷的人)
看板EE_DSnP
标题[问题] hw4 new []的传回值问题
时间Sun Dec 3 04:33:32 2006
依照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)