不能为多维数组赋值

  • 本文关键字:数组 赋值 不能 solidity
  • 更新时间 :
  • 英文 :


我试图使用这个函数,但我得到一个模棱两可的错误。我得到的是"errorCode":"32"

是否有不工作的原因?我错过什么了吗?

function generatePoints(uint256 pointsCount) public view returns (uint256[][1] memory) {
uint256[][1] memory points;
for(uint256 i; i < pointsCount; i++) {
points[i][0] = 1;
}
return points;
}

这似乎也不工作

function _generateXPoints(uint256 pointsCount) public view returns (uint256[] memory) {
uint256[] memory points;
for(uint256 i; i < pointsCount; i++) {
points[i] = 1
}
return points;
}

当您尝试访问索引超出范围的数组时,生成错误代码0x32(solididity文档)

实际上,这个动态内存数组是在没有分配长度的情况下创建的:

// this will have zero length
uint256[] memory points;

请注意,不可能调整内存数组(文档)的大小,因此必须在声明期间指定长度。在我们的例子中,这应该可以工作:

function _generateXPoints(uint256 pointsCount) public view returns (uint256[] memory) {
uint256[] memory points = new uint256[](pointsCount);
for(uint256 i; i < pointsCount; i++) {
points[i] = 1;
}
return points;
}

返回到多维数组。在固体度中,uint256[x][y]表示长度为xy数组。同样重要的是要记住,索引是在与声明相反的方向上访问的。所以我们的数组可以生成为:

uint256[][1] memory points;
points[0] = new uint256[](pointsCount);

通过生成"外部"首先是数组(长度固定为1),然后是内部数组。结论:

function generatePoints(uint256 pointsCount) public view returns (uint256[][1] memory) {
uint256[][1] memory points;
points[0] = new uint256[](pointsCount);
for(uint256 i; i < pointsCount; i++) {
points[0][i] = 1;
}
return points;
}