使用固定的PHP 5.3.5数组进行分段错误

Gab*_*lla 3 php arrays segmentation-fault

在尝试定义这样的数组时:

$array = new SPLFixedArray(256);

for ($i = 0; $i < 256; $i++) {
    $array[$i] = new SPLFixedArray(256);

    for ($j = 0; $j < 256; $j++) {
        $array[$i][$j] = new SPLFixedArray(5);

        for ($k = 0; $k < 5; $k++) {
            $array[$i][$j][$k] = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我只能在CLI中获得"Segmentation Fault".我在C/C++中的SO上读到了这样的错误,这可能是一个内存问题,并建议使用malloc()将所有内容加载到堆内存中.在PHP中我们有这样的工具吗?

即使在小的3d数组中也会发生这种情况,例如15而不是256(但工作在15以下).

谢谢!

Mat*_*hew 5

只有一个PHP错误会出现段错误; 你永远不应该那样做.它在PHP 5.3.5上为我分段.我在5.3.6的更改日志中看不到任何内容,表明它已被修复.(对我来说,它在5.3.6上崩溃了.)

作为一种解决方法,您可以这样做:

$array = new SplFixedArray(256 * 256 * 5);
$array[$i * JK + $j * K + $k] = $foo;
Run Code Online (Sandbox Code Playgroud)

JK和K是常数.JK = $jsize * $ksize;K = $ksize.

无论如何,这可能会比创建3D阵列更好.

更新:

我在PHP 5.3.7-dev上尝试过它,并且没有段错误.所以,手指交叉,它已被修复,并将在PHP 5.3.7中正常工作.