Hey. I'm writing a program that deals with matrices, and I am having a really strange problem with GMP. There is a certain function that I call mtx_bool_read() that is supposed to read in a matrix from a filestream. The problem is that it works, but not in each of the modules I write. The times it doesn't work, it dumps one of these into the terminal window:
<br><br>*** glibc detected *** realloc(): invalid size: 0xb7f98938 ***<br>or<br>Program received signal SIGSEGV, Segmentation fault.<br>0xb7e139ca in realloc () from /lib/tls/i686/cmov/libc.so.6<br><br>I call mpz_inp_raw(), then that leads to...well, I'll just give you the gdb:
<br><br>458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( i=0; i &lt; a-&gt;rows; i++ )<br>(gdb) n<br>459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mpz_inp_raw( a-&gt;rowlabels[i], fp );<br>(gdb) n<br>458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( i=0; i &lt; a-&gt;rows; i++ )<br>(gdb) n<br>459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mpz_inp_raw( a-&gt;rowlabels[i], fp );
<br>(gdb) n<br>458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( i=0; i &lt; a-&gt;rows; i++ )<br>(gdb) n<br>459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mpz_inp_raw( a-&gt;rowlabels[i], fp );<br>(gdb) s<br>__gmpz_inp_raw (x=0x0, fp=0x81cd2a0) at inp_raw.c:88<br>88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>(gdb) n<br>97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fp = stdin;<br>(gdb) n<br>100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fread (csize_bytes, sizeof (csize_bytes), 1, fp) != 1)<br>(gdb) n<br>115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abs_csize = ABS (csize);<br>(gdb) n<br>118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abs_xsize = (abs_csize*8 + GMP_NUMB_BITS-1) / GMP_NUMB_BITS;
<br>(gdb) n<br>120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (abs_xsize != 0)<br>(gdb) n<br>122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MPZ_REALLOC (x, abs_xsize);<br>(gdb) s<br>122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MPZ_REALLOC (x, abs_xsize);<br>(gdb) s<br>__gmpz_realloc (m=0x818e888, new_alloc=4) at realloc.c
:27<br>27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>(gdb) n<br>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_alloc = MAX (new_alloc, 1);<br>(gdb) n<br>33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mp = __GMP_REALLOCATE_FUNC_LIMBS (PTR(m), ALLOC(m), new_alloc);<br>(gdb) n<br>*** glibc detected *** realloc(): invalid size: 0xb7f98938 ***
<br><br>Program received signal SIGABRT, Aborted.<br>0xffffe410 in __kernel_vsyscall ()<br><br>So, we get some sort of abort. Does anybody know the common mistakes that might cause such a problem? I am a little hesitant to post the code since it is in the thousands of lines, but if someone wants to take a look at it, by all means just ask. Oh, why is mpz_inp_raw() even calling mpz_realloc() ?? I thought the integers never shrunk on their own.
<br><br>