Ошибка появляется, потому что вы перебираете переменную j
с i
до addrList.length-1
.Это делает addrList[j+1]
из индекса.
Вам необходимо выполнить итерацию j
с i
до addrList.length-2
.Это может быть достигнуто путем обновления условия до j < addrList.length-1
.
pragma solidity ^0.5.3;
contract C {
address[] addrList;
function addAddr(address addr) public{
addrList.push(addr);
}
function deleteAddr(address addr) public {
for(uint256 i = 0; i < addrList.length; i++) {
if(addr == addrList[i]) {
for(uint256 j = i; j < addrList.length-1; j++) {
addrList[j] = addrList[j + 1];
}
//delete addrList[addrList.length - 1];
addrList.length--;
}
}
}
function returnList() view public returns (address[] memory) {
return addrList;
}
}
Кроме того, вам не требуется использовать шаг удаления, так как компилятор самостоятельно очищает слоты памяти.