php - 固定 PHP 5.3.5 数组的段错误

标签 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;
        }
    }
}

我只在 CLI 中得到“段错误”。我在 C/C++ 中的 SO 上阅读了此类错误,这很可能是内存问题,建议使用 malloc() 将所有内容加载到堆内存中。在 PHP 中我们有这样的工具吗?

即使在小型 3d 阵列中也会发生这种情况,例如 15 而不是 256(但在 15 以下有效)。

谢谢!

最佳答案

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

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

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

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

这可能会给您带来比创建 3D 阵列更好的性能。

更新:

我在PHP 5.3.7-dev上试过,没有段错误。所以,祈祷吧,它已经被修复并且可以在 PHP 5.3.7 中正常工作。

关于php - 固定 PHP 5.3.5 数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352111/

相关文章:

php - 将数据库导入 Google Cloud SQL 错误 : "mysql_query Duplicate entry ' 1' for key ' PRIMARY"

php - 无法在 PHP 中解码 UTF8?

java - java中如何将json数据转换为字符串

arrays - 获取 JSON 数组的最大值并将其存储在 Data Vue 中

c++ - 由于变量范围导致的段错误

c - 为什么这会引发段错误?

php - Phalanger PHP 编译器中的 "Hello world"

php - 使用基于图像的点击计数器获取访客信息

JavaScript:调用 Add 函数返回新数组的高阶函数;错误:输出数组中有 'NaN' 元素

c - 为什么以这种方式传递结构会产生段错误?