When I compile this code on gcc using linux ubuntu 11.04

I got this message on the end of the program after running it normally on the terminal:Code:#include <stdio.h> #include <stdlib.h> float *mult_matrix(int n, float *p, float *q); float *get_matrix(int m, int n); void show_matrix(int m, int n, float *p); int main(void) { int n; float *a, *b, *x; printf("\nEnter the size of the linear system: \n"); scanf("%d", &n); a=get_matrix(n, n); show_matrix(n, n, a); b=get_matrix(n, 1); show_matrix(n, 1, b); x=mult_matrix(n, a, b); show_matrix(n, 1, x); free(a); free(b); free(x); return 0; } float *mult_matrix(int n, float *p, float *q) { int i, j; float *x; x=(float *)malloc((n)*sizeof(float)); if (!x) { printf("NULL pointer detected. Exiting ..."); exit(1); } for(i=0; i<n; i++) { *x=0; x++; } x=x-n; for (i=0; i<n; i++) { for(j=0; j<n; j++) { *x=*x+(*p)*(*q); p++; q++; x++; } q=q-n; } x=x-n; return x; } float *get_matrix(int m, int n) { int i, j; float *a; a=(float *)malloc((m*n)*sizeof(float)); if (!a) { printf("NULL pointer detected. Exiting ..."); exit(1); } for (i=0; i<m; i++) { for (j=0; j<n; j++) { printf("\nEnter with the element a%d%d of the matrix:", i+1, j+1); scanf("%f", a); a++; } } a=a-m*n; return a; } void show_matrix(int m, int n, float *p) { int i, j; printf("\n"); for (i=0; i<m; i++) { printf("\n"); for (j=0; j<n; j++) { printf(" %f ", *p); p++; } } printf("\n"); p=p-m*n; }

It means that the program or the compiler frees the pointers automatically so I dont have to use free()? Or this dont make any sense at all? Please, I need some help. Cheers.Code:*** glibc detected *** ./a.out: double free or corruption (out): 0x097d5058 ***