递归函数中的分配内存错误


Allocated memory error in recursive function

我正试图使用PHP在我的网站上创建一个加密程序。在使用Lua之前,我已经创建了相同的东西,所以我目前正试图将其移植过来,但它错误地声称我已经耗尽了太多内存,但我不确定是什么原因导致了这种情况:

function offsetASCII($OrigByte, $Offset) {
    $OrigByte = $OrigByte + $Offset;
    if ($OrigByte > $MaxASCII) {
        return offsetASCII($MinASCII, $OrigByte-$MaxASCII);
    } else {
        return $OrigByte;
    }
}

其思想是,它不断地将数字OrigByte偏移数字Offset。如果OrigByte的新值大于允许的最大值,则它会重复使OrigBytes成为允许的最小值的函数,并使Offset成为它超过最大值的"剩余"量。这会重复,直到它在最大值内,然后返回它。

错误为:

致命错误:第49行的[PageDirectoryHere]中允许的94371840字节的内存大小已用完(试图分配130968字节)

第49行是:

return offsetASCII($MinASCII, $OrigByte-$MaxASCII);

OrigByte可以是任何转换为ASCII值的字母。MinASCII和MaxASCII是ASCII中大写字母的最小值和最大值(65和90)。偏移量最初为兰特($MinASCII,$MinASCII+25)。

我不知道为什么会发生这种事,所以提前感谢您的帮助!

解决方案:

function offsetASCII($OrigByte, $Offset, $MinASCII, $MaxASCII) {
    $OrigByte = $OrigByte + $Offset;
    if ($OrigByte > $MaxASCII) {
        return offsetASCII($MinASCII, $OrigByte-$MaxASCII, $MinASCII, $MaxASCII);
    } else {
        return $OrigByte;
    }
}
$EncryptedChar = chr(offsetASCII($NowByte, $NewKeyNums[$Iter], 65, 90));

我做错的第一件事是试图在函数范围之外使用$MinASCII和$MaxASCII(我通过将它们作为参数添加来解决)。

我做错的第二件事是在我调用函数的范围之外定义$MinASCII和$MaxASCII(我通过输入它们所代表的数字而不是为它们设置变量来解决问题)。