Solidity

Solidity 中的數組複製記憶體

  • April 19, 2022

我有這個簡單的程式碼:

function restart() public returns (uint256[] ) {
   uint256[] memory result = new uint256[](5);
   result[0] = 10;
   uint256[] memory result1 = new uint256[](5);
   result1 = result;
   result1[1] = 20;
   return result;
}

結果最終值為:{10,20}。但我希望它只是 {10}。有沒有辦法複製數組而不是指針?我基本上只想創建結果的“本地”副本。謝謝你

您可以逐個元素複製

function restart() public returns (uint256[] ) {
   uint256[] memory result = new uint256[](5);
   result[0] = 10;
   uint256[] memory result1 = new uint256[](5);

   for (uint i=0; i < 5; i += 1) {
       result1[i] = result[i];
   }

   result1[1] = 20;
   return result;
}

好吧,你在做什麼對我來說太奇怪了。我想如果你想這樣做,你可以從函式記憶體中取出結果變數並將其放在函式之外的儲存中。

uint256[] public result = new uint256[](5);
  
   function restart() public returns (uint256[] ) { 
       result[0] = 10; 
       uint256[] memory result1 = new uint256[](5); 
       result1 = result; 
       result1[1] = 20; 
       return result; 
       
   }

我認為這樣做的原因是,當您在一個函式中創建 2 個記憶體變數並將一個分配給另一個時,它們都指向同一個位置,因為它們都是在函式內部創建的並且它們都是本地的。所以你不能做這樣的事情。

Solidity 文件

從記憶體到記憶體的分配只會創建引用。這意味著對一個記憶體變數的更改在引用相同數據的所有其他記憶體變數中也可見。

我仍然等待有人批准或拒絕我所說的話。

引用自:https://ethereum.stackexchange.com/questions/83215