Edit report at http://bugs.php.net/bug.php?id=53237&edit=1

 ID:                 53237
 User updated by:    lifinsky at yandex dot ru
 Reported by:        lifinsky at yandex dot ru
 Summary:            LinkedList max nodes Segmentation fault
 Status:             Assigned
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Vista, Linux
 PHP Version:        5.3.3
 Assigned To:        dmitry
 Block user comment: N

 New Comment:

Without this line we will not have LinkedList



Example in JSON Format:



{

    data: 1

    next: {

        data: 2

        next: {

            data: 3

            next: ...

        }

    }

}


Previous Comments:
------------------------------------------------------------------------
[2010-11-03 22:01:10] [email protected]

I noticed crash is caused by following part:

  $this->_tail->next = $node;

  $this->_tail = $node; // without this line, no crash

------------------------------------------------------------------------
[2010-11-03 16:53:26] lifinsky at yandex dot ru

Description:
------------
I test linkedList performance and memory usage on Windows Vista Premium
with PHP 5.3.3. When list length > 34860 I have server fatal Error (
Segmentation fault) and my fast-cgi script closed. I try test on Linux
(PHP 5.2.6) but have some error if length ~ 32735. This error is not
related with memory limit.

Test script:
---------------
class LinkedList { 

        private $_length = 0;

        private $_head;

        private $_tail;

        public function add($data) {

                $node = (object) array('data' => $data, 'next' => null);

                if ($this->_length == 0) {

                        $this->_head = $node;

                        $this->_tail = $node;

                } else {

                        $this->_tail->next = $node;

                        $this->_tail = $node;

                }

                $this->_length++;

        }

}





$a = new LinkedList();

$startMemory = memory_get_usage();

$start = microtime(true);

for ($i = 1; $i <= 34860; $i++) {

        $a->add($i);

}

$endMemory = memory_get_usage();

$end = microtime(true);

print(($end - $start) . '<br />');

print((int) (($endMemory - $startMemory) / 1024) . '<br />');

Expected result:
----------------
If length = 34860 I got 



0.12323784828186

11276



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53237&edit=1

Reply via email to