[PLUG] [OT] Problem with gcc

Aneesh Mulye aneesh.mulye at gmail.com
Thu Aug 23 11:20:13 PDT 2007


For some reason, the following code doesn't work:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

/* float determinant(float *a, int n) {{{1 */
float determinant(float *a, int n)
{
    float *b, det=0;

    if(n<2)
        return 0;

    if(n==2)
        det=( (*a)*(*(a+3)) - (*(a+1))*(*(a+2)));
    else
    {
        b=malloc((n-1)*(n-1)*sizeof(float));

         int i,j,k,m=0,l=0;

        for(i=0;i<n;i++)
        {
            for(j=1;j<n;j++)
                for(k=0;k<n;k++)
                    if(k!=i)
                    {
                        *(b + (n-1)*l + m)=
                            *(a + n*j+ k);
                        m++;
                        l+=m/(n-1);
                        m%=(n-1);
                    }

            det+=(*(a+i))*determinant(b, n-1)*pow(-1,i);
        }

        free(b);
    }

    return det;
}
/* 1}}} */

int main()
{
    float *a, det;
    int n,i,j;

    printf("Enter the no. of rows\n# ");
    scanf("%d", &n);
    printf("\n\n");

    a=malloc(n*n*sizeof(float));

    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        {
            printf("Enter element (%d,%d)# ", (i+1), (j+1));
            scanf("%f", (a + i*n + j));
        }

    det=determinant(a, n);

    free(a);

    printf("\n\nThe determinant is: %f\n\n", det);

    return 0;
}

Any help is appreciated.

Here is the error:

*** glibc detected *** ./a.out: free(): invalid next size (fast):
0x0000000000601040 ***
======= Backtrace: =========
/lib/libc.so.6[0x2ab41ff97b23]
/lib/libc.so.6(cfree+0x8c)[0x2ab41ff9b26c]
./a.out[0x400877]
./a.out[0x40095a]
/lib/libc.so.6(__libc_start_main+0xf4)[0x2ab41ff458e4]
./a.out[0x4005e9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:04 4014120
  /home/aneeshm/work/se/pl-ass/mat/a.out
00600000-00601000 rw-p 00000000 08:04 4014120
  /home/aneeshm/work/se/pl-ass/mat/a.out
00601000-00622000 rw-p 00601000 00:00 0                                  [heap]
2ab41fa89000-2ab41faa5000 r-xp 00000000 08:04 8880137
  /lib/ld-2.5.so
2ab41faa5000-2ab41faaa000 rw-p 2ab41faa5000 00:00 0
2ab41fca4000-2ab41fca6000 rw-p 0001b000 08:04 8880137
  /lib/ld-2.5.so
2ab41fca6000-2ab41fd27000 r-xp 00000000 08:04 8912908
  /lib/libm-2.5.so
2ab41fd27000-2ab41ff26000 ---p 00081000 08:04 8912908
  /lib/libm-2.5.so
2ab41ff26000-2ab41ff28000 rw-p 00080000 08:04 8912908
  /lib/libm-2.5.so
2ab41ff28000-2ab42006f000 r-xp 00000000 08:04 8880190
  /lib/libc-2.5.so
2ab42006f000-2ab42026f000 ---p 00147000 08:04 8880190
  /lib/libc-2.5.so
2ab42026f000-2ab420272000 r--p 00147000 08:04 8880190
  /lib/libc-2.5.so
2ab420272000-2ab420274000 rw-p 0014a000 08:04 8880190
  /lib/libc-2.5.so
2ab420274000-2ab42027a000 rw-p 2ab420274000 00:00 0
2ab42027a000-2ab420287000 r-xp 00000000 08:04 8880139
  /lib/libgcc_s.so.1
2ab420287000-2ab420487000 ---p 0000d000 08:04 8880139
  /lib/libgcc_s.so.1
2ab420487000-2ab420488000 rw-p 0000d000 08:04 8880139
  /lib/libgcc_s.so.1
2ab424000000-2ab424021000 rw-p 2ab424000000 00:00 0
2ab424021000-2ab428000000 ---p 2ab424021000 00:00 0
7fff8b00c000-7fff8b021000 rw-p 7fff8b00c000 00:00 0                      [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vdso]
Aborted (core dumped)



More information about the plug-mail mailing list