Ethereum-solidity的坑
以太坊合约的坑.
被意外更改的合约变量
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
如果msg.sender
是 0xca35b7d915458ef540ade6068dfe2f44e8fa733c
,那么想象中的合约变量a,b
都应该是这个值,但是结果却是:
1 2 |
|
可以看出a
变成了 g[0]
的值。 这是因为solidity对于这个未初始化的数组时,把它指向了合约变量地址,所以修改 g[0]
就相当于修改了 a
,读者可以试试修改 g[1]
实际是修改了 b
.
解决办法是将数组改成memory
,防止他变成storage
1
|
|