BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:
This creates and returns a blessed scalar ref containing an allocation in the PV. Why does it crash when I try to look at the PV? (Or even call length on it?)
#! perl -slw use strict; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'END_C', NAME => 'test', CLEAN_AFTER_BUILD => 0; char *newxz( unsigned __int64 bytes ) { char *p; warn( "Attempting allocate %I64u bytes\n", bytes ); Newxz( p, bytes, char ); if( !p ) croak( "Couldn't allocate %I64u bytes\n", bytes ); return p; } SV* new( const char * classname, SV *bits ) { unsigned __int64 bytes = ( SvUV( bits )+7 ) / 8; unsigned char *vector = newxz( bytes ); SV * obj; SV * obj_ref; obj = newSV( 0 ); SvPOK_only( obj ); SvPV_set( obj, vector ); SvLEN_set( obj, bytes ); obj_ref = newRV_noinc( obj ); sv_bless( obj_ref, gv_stashpv( classname, GV_ADD) ); return obj_ref; } END_C use Devel::Peek; my $v = new( 'fred', eval $ARGV[ 0 ] ); #print length $$v; Dump( $$v );
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: [I::C] Why does it segfault?
by Eliya (Vicar) on Mar 15, 2012 at 03:46 UTC | |
by BrowserUk (Patriarch) on Mar 15, 2012 at 06:08 UTC | |
by ikegami (Patriarch) on Mar 16, 2012 at 21:25 UTC | |
|
Re: [I::C] Why does it segfault? (NDEBUG?)
by tye (Sage) on Mar 15, 2012 at 02:58 UTC | |
by BrowserUk (Patriarch) on Mar 15, 2012 at 06:13 UTC | |
by tye (Sage) on Mar 15, 2012 at 13:49 UTC | |
by ikegami (Patriarch) on Mar 16, 2012 at 19:53 UTC |