Solidity
在返回數組的庫中呼叫函式時出現異常
我有一個具有公共功能的 Solidity 庫,它返回一個 uint8
$$ $$大批。
pragma solidity ^0.8.4; library LibA { function getArray() public pure returns (uint8[] memory) { uint8[] memory arr; arr[0] = 100; ... return arr; } }
然後我有一個引用庫的 Solidity 智能合約,並呼叫試圖訪問庫中定義的數組的函式。程式碼看起來像這樣。
pragma solidity ^0.8.4; import "./LibA.sol"; contract SampleContract { function doSomething(uint8 _index) public pure returns (uint8) { return LibA.getArray()[_index]; } }
程式碼編譯得很好。我有一個使用 Hardhat 執行的 mocha 單元測試來測試該方法,當我執行單元測試時,我得到以下異常。
錯誤:處理事務時出現 VM 異常:使用緊急程式碼 0x32 恢復(在越界或負索引處訪問的數組)
我對 Solidity 很陌生,我無法準確理解異常的原因是什麼以及如何解決它。一些幫助將不勝感激。
我以前從未使用過庫,但我相信問題可能是您試圖在記憶體中擁有一個動態大小的數組。這應該是
uint8[] memory arr = new uint8[](arraySize);
為了預先分配記憶體中的空間。