Re: gcc/perl/XS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


Attachment: pgpMzNLCJ18WI.pgp
Description: PGP signature

-- 
fedora-list mailing list
fedora-list@xxxxxxxxxx
To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list
Guidelines: http://fedoraproject.org/wiki/Communicate/MailingListGuidelines

[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux