Php运行下面代码为什么会内存泄露?


   
  error_Reporting(E_ALL);
  
function cmp($a,$b) {
static $first = true;
if ($first) {
unset($GLOBALS['arr']["B"]);
}
$first = false;
return ($a < $b) ? -1 : 1;
}

$arr = new ArrayObject(array("A" =>1,"B" => 2, "C" =>3, "D" => 4));
$arr->uasort("cmp");

运行上边代码为什么会出现内存泄露的问题?

趣味 php

无产光辉指 12 years, 5 months ago
   
  error_Reporting(E_ALL);
  
function cmp($a,$b) {
static $first = true;
if ($first) {
try{
unset($GLOBALS['arr']["B"]);
}catch(Exception $e){
$e->getMessage();
}

}
$first = false;
return ($a < $b) ? -1 : 1;
}

$arr = new ArrayObject(array("A" =>1,"B" => 2, "C" =>3, "D" => 4));

你需要把unset($GLOBALS['arr']["B"]);try catch起来因为当排序开始时
$GLOBALS['arr']["B"]这个元素已经unset掉了 所以当循环到调用这个元素的时候是找不到他的程序就中断了至于内存泄露好像是php的bug
PHP PHP <= 5.3.2
PHP PHP <= 5.2.13
都有这个问题
参考 PHP ArrayObject::uasort()中断处理内存破坏漏洞

fromst answered 12 years, 5 months ago

Your Answer