Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^3: Use of freed value in iteration

by kwetal (Initiate)
on Apr 14, 2012 at 17:19 UTC ( [id://965085]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Use of freed value in iteration
in thread Use of freed value in iteration

I succeeded in generating this error with a pure perl program (v5.10.1 (*) built for i686-cygwin-thread-multi-64int) with the following code:
#!/usr/bin/perl -w use strict; use Data::Dumper; $Data::Dumper::Indent = 1; my $hashref; for my $i0 (1..2) { for my $i1 (1..2) { for my $i2 (1..2) { $hashref->{"$i0"}{"$i0:$i1"}{"$i0:$i1:$i2"} = "$i0:$i1:$i2"; } } } deletehashlevel($hashref, 1); print Dumper($hashref); exit; sub athashleveldo { my ($h, $n, $action) = @_; if ($n==0) { $action->($h); } else { athashleveldo($_, $n-1, $action) for values %$h; } } sub deletehashlevel { my ($h, $n) = @_; athashleveldo($h, $n, sub { my %tmp; for my $key (keys %$h) { my $val = delete $h->{$key}; @tmp{keys %$val} = values %$val; } %$h = %tmp; }); } __END__
Running this program:
$ ./testhashdel Use of freed value in iteration at ./testhashdel line 27.
The error goes away when I apply the same solution as js1 did, replacing:
athashleveldo($_, $n-1, $action) for values %$h;
with
my @v = values %$h; athashleveldo($_, $n-1, $action) for @v;
Is this a bug in Perl, lurking to bite me at some later time?

Replies are listed 'Best First'.
Re^4: Use of freed value in iteration
by Discipulus (Canon) on Feb 26, 2024 at 12:36 UTC
    Hello,

    I confirm the problem with strawberry portable v5.12.3 32bit. The next I have is 5.20.3 and runs with no errors

    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Re^4: Use of freed value in iteration
by choroba (Cardinal) on Apr 14, 2012 at 20:13 UTC
    No error in 5.14.2 for i586-linux-thread-multi.
Re^4: Use of freed value in iteration
by Sewi (Friar) on Jun 15, 2012 at 14:24 UTC
    Confirmed in perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi (debian squeeze) but not in perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi (Ubuntu 12.04 Precise).

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://965085]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (3)
As of 2026-04-16 05:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.