OS-abhängige Speicherprobleme

26/03/2010 - 09:17 von frank | Report spam
Hallo Ng,

ich habe mir ein tie-ed hash geschrieben.
Unter perl -v:

This is perl, v5.8.9 built for MSWin32-x86-multi-thread

habe ich keinerlei Probleme, aber unter perl -v:

This is perl, v5.10.0 built for i586-linux-thread-multi

erhalte ich Abstürze mit:

Speicherzugriffsfehler

oder

panic: free from wrong pool at xxx.pl line xxx


woran kann das liegen?

Danke Frank

abstürzendes Testscript:

use shash;

$a={1,"P1"};

tie %db,'shash',$a;

$db{1} =~ s/P/7/eg;


shash.pm:

$::doku{shash}='Sicherer Hash, Zugriff auf nicht Vorhandens führt zu
Fehler.
Hash wird als Referenz übergeben.

use shash;
$rhs={3,22,3443,4};
tie my%hs,\'shash\', $rhs;

';

package shash;

use strict;
use Carp;# qw(croak);
use Data::Dump qw(dump);

sub TIEHASH
{
my$self = shift;
my%hs1;# falls keine hashreferenz übergeben
my$hs= shift;
$hs = \%hs1 unless defined $hs;
my$r = bless $hs,$self;
return $r;
}

sub EXISTS
{
my ($self, $key) = @_;
return (exists $self->{$key})?1:0;
}

sub STORE
{
my ($self, $key, $value) = @_;
$self->{$key}=$value;
}

sub DELETE
{
my ($self, $key) = @_;
delete $self->{$key};
}

sub FIRSTKEY
{
my $self = shift;
my $a = keys %{$self}; # reset each() iterator
each %{$self}
}

sub NEXTKEY
{
my $self = shift;
each %{$self}
}

sub FETCH
{
my ($self, $key) = @_;
confess("nicht vorhandener Key $keyhash: " . (dump $self-

{hs}) . "") unless exists $self->{$key};


return $self->{$key};
}

1;
 

Lesen sie die antworten

#1 Frank Seitz
26/03/2010 - 09:32 | Warnen spam
frank wrote:

erhalte ich Abstürze mit:

Speicherzugriffsfehler

oder

panic: free from wrong pool at xxx.pl line xxx

woran kann das liegen?



Da kein XS-Code dabei ist, kann der Fehler nicht an
dir liegen.

$::doku{shash}='Sicherer Hash, Zugriff auf nicht Vorhandens führt zu
Fehler.



Das kannst du wesentlich effizienter und eleganter mit
Restricted Hashes lösen. Die sind bei jedem Perl dabei.

Ich habe darüber einen Artikel im Perl Magazin 3/2009 geschrieben.

Grüße
Frank
Dipl.-Inform. Frank Seitz
Anwendungen für Ihr Internet und Intranet | Web-, Datenbank-, Unix-Development
Tel: +49 (0)4103/180301; Fax: -02; Industriestr. 31, D-22880 Wedel

Blog: http://www.fseitz.de/blog
XING-Profil: http://www.xing.com/profile/Frank_Seitz2

Ähnliche fragen