Why the error: "InternalCompilerError: Static memory load of more than 32 bytes requested"?
Why the error: "InternalCompilerError: Static memory load of more than 32 bytes requested"?
使用 Remix (https://remix.ethereum.org/) 并使用结构。编译器是 0.4.19+commit.c4cbbb05
。 "Optimization" 未选中。
pragma solidity ^0.4.4;
contract Test {
struct FooBar {
uint8 foo;
uint16 bar;
}
FooBar public fooBar;
function getFooBar() public view returns(FooBar) {
return fooBar;
}
function setFooBar(FooBar value) public {
fooBar = value;
}
}
显示错误:"InternalCompilerError: Static memory load of more than 32 bytes requested."
不知道为什么。在我看来,结构 FooBar
只有 3 个字节大。我的两个函数 reads/writes 一个 FooBar
。我在这里错过了什么?
更新
稍微重构一下代码,使其更清晰:
pragma solidity ^0.4.4;
contract Test {
struct FooBar {
uint8 foo;
uint16 bar;
}
FooBar public fooBar;
// InternalCompilerError: Static memory load of more than 32 bytes requested.
function setFooBar1(FooBar value) public {
fooBar = value;
}
// No such error.
function setFooBar2(uint8 foo, uint16 bar) public {
fooBar.foo = foo;
fooBar.bar = bar;
}
}
显然直接传递结构会导致编译错误,而传递单个字段则不会。想知道有什么区别。
这似乎是一个 solidity 错误 - 请参阅:
https://github.com/ethereum/solidity/issues/3361
和:
https://github.com/ethereum/solidity/issues/3069
现在还有以太坊的 Stack Exchange:
使用 Remix (https://remix.ethereum.org/) 并使用结构。编译器是 0.4.19+commit.c4cbbb05
。 "Optimization" 未选中。
pragma solidity ^0.4.4;
contract Test {
struct FooBar {
uint8 foo;
uint16 bar;
}
FooBar public fooBar;
function getFooBar() public view returns(FooBar) {
return fooBar;
}
function setFooBar(FooBar value) public {
fooBar = value;
}
}
显示错误:"InternalCompilerError: Static memory load of more than 32 bytes requested."
不知道为什么。在我看来,结构 FooBar
只有 3 个字节大。我的两个函数 reads/writes 一个 FooBar
。我在这里错过了什么?
更新
稍微重构一下代码,使其更清晰:
pragma solidity ^0.4.4;
contract Test {
struct FooBar {
uint8 foo;
uint16 bar;
}
FooBar public fooBar;
// InternalCompilerError: Static memory load of more than 32 bytes requested.
function setFooBar1(FooBar value) public {
fooBar = value;
}
// No such error.
function setFooBar2(uint8 foo, uint16 bar) public {
fooBar.foo = foo;
fooBar.bar = bar;
}
}
显然直接传递结构会导致编译错误,而传递单个字段则不会。想知道有什么区别。
这似乎是一个 solidity 错误 - 请参阅:
https://github.com/ethereum/solidity/issues/3361
和:
https://github.com/ethereum/solidity/issues/3069
现在还有以太坊的 Stack Exchange: