Solidity
Solidity 儲存指針
contract X{ uint256 public x=2; uint256[] public array= [9,8]; function X(){} function getLength() public constant returns(uint256){ return array.length; } function modifyArray( uint256 _index, uint256 _value){ array[_index]= _value; } function popLength(){ array.length--; } }
Roman Storm 在此影片中展示瞭如何在此影片https://www.youtube.com/watch?v=gUqHgFuSsqg中使用儲存指針更改變數 x,最後使用 modifyArray-function,我無法得到它. 有人可以詳細而簡單地解釋一下這裡發生了什麼。提前致謝。程式碼屬於他(在連結中)。
沒什麼好解釋的。一個
uint256[] public array
in storage 的組織如下:| length | 0 | 1 | ... | length-1 |
每個
| X |
代表一個 32 字節的插槽。問題是舊的solidity 版本在修改數組長度時允許下溢。
例如
array
有 2 個元素,所以呼叫popLength()
兩次後長度將為零。如果第三次呼叫它將是
115792089237316195423570985008687907853269984665640564039457584007913129639935
which is2**256 - 1
。因此,
array[X]
您幾乎可以在合約儲存中的任何位置寫入。