Eliminar filas de una matriz dinámica en c.

Franz
19 de Enero del 2003
He hecho un módulo en C que no hace más que darme problemas.
El caso es que parece estar bien, pero a lo mejor es que estoy equivocado.
El módulo en cuestión es este:

struct MatrizD{
float **M;
unsigned int m,n;
};

void SFilaMD (struct MatrizD *A; unsigned int j){

unsinged int j0, m=A->m-1;

free(A->M[j]);

for (j0=j; j0<m-1; j0++)
A->M[j0]=(float *)A->M[j0+1];

free(A->M[m]);

A->M=(float **)realloc(A->M, m*sizeof(float *));
A->M=m;
};

Sí lo habeis adivinado intento quitar una fila de la matriz. Por supuesto, esta ya está creada.
El programa no da síntomas de error, mientras las quito, pero cuando quiero dejar de utilizar la estructura, y hago el primer free(A->M[j]);
me salta el error. Es como si quisiera liberar un espacio de memoria reservado para otro programa.
He probado a compilarlo en linux y en windows, los dos me dan sendos errores, si conoceis alguna forma de solventarlo, avisadme.

P.D. Si me podeis explicar el error estaría también muy agradecido (no me deis el pez, enseñadme a pescar).