gcc/perl/XS

Sam Varshavchik mrsam at courier-mta.com
Sun Aug 2 02:19:37 UTC 2009


Patrick Dupre writes:

> Hello,
> 
> In a c subroutine I have the following code:
> for (i = 0 ; i < 5 ; i++) {
>    floatMatrix new_lines = (floatMatrix) realloc (lines, (nb_lines) * sizeof (lineArray)) ;
>    lines=new_lines ;
>    nb_lines++ ;
>    }
> 
> which is called from a perl call through an XS interface.
> 
> It work fine with gcc.4.3.2 (32 but arch) machine.
> With gcc 4.4.0 on a x86_64 arch it fails (segmentation fault) at the 
> second reallocation for nb_lines high (10000). 
> However,
> it is OK if nb_lines = 1000, and it is also OK if the same shared
> library is linked to a c program calling the same subroutine

Insufficient information. The definition of the floatMatrix type is missing. 
The original allocation of 'lines' is missing.

Generally, run your code through valgrind. An earlier memory corruption, 
that only manifests itself at this point, is also a possibility. valgrind 
should help in catching memory corruption earlier.

> I also noticed that the values of the pointer is identical after and
> before the realloc call (if not NULLý¿¿¿¿‚).

Correct. This is possible, if there is an unallocated memory block that 
immediately follows the one being resized, in which case the C library can 
merely adjust its internal data structures to reflect the updated memory 
map.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/users/attachments/20090801/bb461706/attachment-0001.bin 


More information about the users mailing list