#19943 [Ver->Csd]: Ragged array returns undefined results
ID: 19943
Updated by: sniper@php.net
Reported By: su-php at bossi dot com
-Status: Verified
+Status: Closed
Bug Type: Scripting Engine problem
Operating System: Win2K
PHP Version: 4.3.2-dev
New Comment:
Memleak fixed in CVS.
Previous Comments:
------------------------------------------------------------------------
[2003-02-25 02:46:58] sniper@php.net
Memleak still present in 4.3.2-dev.
------------------------------------------------------------------------
[2002-11-05 13:40:16] moriyoshi@php.net
The reported behaviour itself is not a bug
(see http://lists.php.net/article.php?group=php.dev&article=90522
for
detail), but the memory leaks imply another bug. So I decided to
reclassify this as Scripting Engine problem, and change the status to
"Analyzed".
Anyway thank you for the bug report!
--
Moriyoshi
------------------------------------------------------------------------
[2002-10-30 07:30:05] Ppslim at ntlworld dot com
I think this is pretty much invalid.
su-php@bossi.com posted 2 examples. Only 1 is correct, or infact, valid
code.
In the first example, you have the following 2 array assignments.
$ragged[$count] = 'single '.$count;
$ragged[$count]['idx'] = 'ragged '.$count;
In this, you assign a string to $ragged[$count], then, you turn it into
an array using $regged[$count]['idx'].
This is invlaid in most languages.
In the $ragged[$count], $ragged['idx'][$count] method, no type changes
are taking place.
------------------------------------------------------------------------
[2002-10-16 22:51:14] iliaa@php.net
A pretty interesting bug this is, there appear to be 2 possible
behaviours that can happen here and only 1 is correct.
<?php
$ar = array();
for ( $count = 0; $count < 10; $count++ )
{
$ar[$count] = "$count";
$ar[$count]['idx'] = "$count";
}
for ( $count = 0; $count < 10; $count++ )
{
echo $ar[$count]." -- ".$ar[$count]['idx']."\n";
}
?>
The code above will output:
t 0 -- t
t 1 -- t
t 2 -- t
t 3 -- t
t 4 -- t
t 5 -- t
t 6 -- t
t 7 -- t
t 8 -- t
t 9 -- t
/home/rei/PHP_CVS/php4/Zend/zend_operators.c(1008) : Freeing
0x08369384 (6 bytes), script=a.php
Last leak repeated 9 times
If the " around the $count variable are removed then the script
reports:
Warning: Cannot use a scalar value as an array in
/home/rei/PHP_CVS/php4/a.php on line 7
/home/rei/PHP_CVS/php4/a.php(7) : Warning - Cannot use a scalar value
as an array
for every assignment and does no initialize any of the
$ar[$count]['idx'] values.
------------------------------------------------------------------------
[2002-10-16 19:54:16] su-php at bossi dot com
However, the following codes does work, even though the array is still
ragged:
<?
$ragged = array();
for ( $count = 0; $count < 10; $count++ )
{
$ragged['idx'][$count] = 'ragged '.$count;
$ragged[$count] = 'single '.$count;
}
?>
<html><head></head><body>
<table border="1">
<tr>
<td>Expected</td><td>Actual</td>
<td>Expected IDX</td><td>Actual IDX</td>
</tr>
<?
for ( $count = 0; $count < 10; $count++ )
{
?>
<tr>
<td> <?= 'single '.$count ?> </td><td> <?= $ragged[$count]
?> </td>
<td> <?= 'ragged '.$count ?> </td><td> <?=
$ragged['idx'][$count] ?>
</td>
</tr>
<? } ?>
</table></body></html>
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/19943
--
Edit this bug report at http://bugs.php.net/?id=19943&edit=1
Thread (8 messages)