我从CodeEval中解决了一些问题并在PHP中遇到了这个奇怪的错误。我还没有和其他语言碰到这样的事情,所以我不知道为什么会这样。没有包括整个答案(请不要帮助我找到解决方案,除了PHP以这种方式行事的原因),这就是我遇到问题的地方:&/ p>
for ($j = 0; $j < count($beauty); $j++) {
$temp = $beauty[$j];
$beauty[$j] = $beauty[$j+1];
$beauty[$j+1] = $temp;
}
基本上我已经计算了每个单独的字母,现在我要对包含这些值的数组进行排序,这样我就可以确定&#34;美容&#34;的字符串。奇怪的是我得到了错误:
允许的内存大小为134217728字节耗尽
运行上面的代码块时。更奇怪的是,当我在for循环中取出最后一行时,我不再收到错误。
for ($j = 0; $j < count($beauty); $j++) {
$temp = $beauty[$j];
$beauty[$j] = $beauty[$j+1];
}
工作得很好,我无法解决这个问题。我想也许有一些奇怪的事情,比如PHP通过引用传递数组中的值,或者通常通过引用传递变量值,这可能会导致问题,但我不会看到那个&#39是这样的。我不明白为什么将以下数组位置的值设置为存储在$ temp中的值会导致程序占用大量内存。在这种情况下,循环仅适用于计数为19的数组。我无法想象19个整数如何在内存中占用128Mb的空间,即使我们在每次传递中都进行了交换。 / p>
任何人都知道为什么会这样吗?
答案 0 :(得分:3)
您正在此行创建一个无限循环:
$beauty[$j+1] = $temp;
因为在$beauty
循环的每次迭代中,你都在添加一个新的元素,你的循环永远不会完成