0

Remix 在线编译器在相同代码和相似场景之间给出了不稳定的错误消息。

Remix 不断抛出“编译期间出现未知异常”。当函数执行多个动态返回时(三个 uint[] 动态数组)。

但是当我将返回的大小调整为两个动态数组时,问题就消失了。现在我对它背后的原因一无所知。已经切换了不同的 pragma solidity 版本。

//Remix 在编译过程中抛出未知异常。

function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {

    uint[] memory Im_WinnerUserIdSet;
    uint[] memory Im_DrawIdSet;
    uint[] memory Im_LoserIdSet;

    /*
    ...        
    */

    return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
}

//但是,这行得通!?:(

function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId) {

    uint[] memory Im_WinnerUserIdSet;
    uint[] memory Im_DrawIdSet;
    uint[] memory Im_LoserIdSet;

    /*
    ...        
    */       
    return (Im_WinnerUserIdSet, Im_DrawIdSet);
}

这是一个特殊的问题吗?背后的原理是什么以及如何解决

拜托,我被这个困了一天

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

以下列方式编辑您的函数修复了您收到的错误。

    pragma solidity >=0.4.22 <0.6.0;

contract Test {
    function Determine_Result() public pure returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {

        uint[] memory Im_WinnerUserIdSet;
        uint[] memory Im_DrawIdSet;
        uint[] memory Im_LoserIdSet;

        /*
        ...        
        */

        return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
    }

}

您的问题似乎与编译器版本有关。我编写的代码在 0.5.2 版上编译。您编写的代码在 0.4.22 版本上编译,但在 0.5.2 版本上不编译。

据我所知,这是您在函数中声明未使用的 2 个参数的结果。

尽管它在一种情况下出错但在另一种情况下出错,但它似乎仍然是编译器中的一个错误,至少现在您知道是什么原因造成的。

于 2019-01-05T12:47:18.330 回答