I looked into it, and I've found you really got a point.
---------------------------
<?php
$ragged = array();
$ragged[0] = "a";
$ragged[0][0] = array("1");
var_dump($ragged);
?>
---------------------------
The first script causes no leaks, while the second does:
---------------------------
<?php
$ragged = array();
$ragged[0] = "a";
$ragged[0][0] = (string)array("1");
var_dump($ragged);
?>
---------------------------
Thanks for your insight.
Moriyoshi
"Ilia A." <[EMAIL PROTECTED]> wrote:
> I agree with you that this bug may not be critical, I am not certain why it
> was marked as such, however I do believe this is a bug that should be fixed.
> If my understand of the situation is correct, the memory leak is the result of
> original $ragged[$count] = "$count"; expression. At this point ZE creates a
> ZVAL that contains a 2 byte string value, number + \0.
> When $ragged[$count]['idx'] = 'ragged '.$count; is executed, the original zval
> containing a string is converted to an array. During this conversion the
> string value is not freed and the result is a memory leak.
>
> Ilia
>
> On November 5, 2002 01:45 pm, Moriyoshi Koizumi wrote:
> > This appears not a bug, but an expected behaviour for me.
> > Let's change it from "Critial" to "Won't Fix" or so on.
> >
> > ---------------------------------------------------------------
> > <?php
> > $ragged = array();
> > for ($count = 0; $count < 10; $count++) {
> > $ragged[$count] = "$count";
> > $ragged[$count]['idx'] = "$count";
> > }
> > for ($count = 0; $count < 10; $count++) {
> > printf("single %d: %s\n", $count, $ragged[$count]);
> > printf("ragged %d: %s\n", $count, $ragged[$count]['idx']);
> > }
> > ?>
> > ---------------------------------------------------------------
> >
> > The above snippet is actually a variant of the following code:
> > ---------------------------------------------------------------
> > <?php
> > $ragged = array();
> > for ($count = 0; $count < 10; $count++) {
> > $ragged[$count] = (string)$count;
> > $ragged[$count]{(int)'idx'} = (string)$count;
> > }
> > for ($count = 0; $count < 10; $count++) {
> > printf("single %d: %s\n", $count, $ragged[$count]);
> > printf("ragged %d: %s\n", $count, $ragged[$count]{(int)'idx'});
> > }
> > ?>
> > ---------------------------------------------------------------
> > Then, "Cannot use a scalar value as an array" warnings are due to
> > applications of braces for non-string variables.
> > But I can't still explain why leaks occured.
> >
> > Moriyoshi
>
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php