Error con reserva dinámica de matrices

Tartalo
20 de Diciembre del 2005
Buenas. Antes de nada gracias a toda la gente que pasa su tiempo ayudando a personas como yo, que tenemos algún problemilla al programar.
Bueno, mi problema es el siguiente. Reservo una matriz mediante una función a la que paso el num. de columnas y filas. Primero reservo espacios para punteros a punteros de integers según el número de columnas:

mat=(int**)malloc(sizeof(int*)*col);

Después, en cada columna reservo sitio para un integer por cada fila que quiero que tenga la matriz.

La función en cuestión sería la siguiente.

int **matErreserbatu(int fil,int col)
{
int i,**mat;

mat=(int**)malloc(sizeof(int*)*col);
if (!mat) return NULL;
for (i=0;i<col;i++)
{
mat[i]=(int*)malloc(sizeof(int)*fil); //ERROR (a veces -_-)
if (!mat[i]) return NULL;
}
return mat;
}

Bien pues el error ocurre donde he escrito. Pero lo gracioso es que cuando creo un mini-programa de prueba lo hace siempre bien. En cambio cuando lo paso a donde verdaderamente lo uso, pueden ocurrir dos cosas:

1- Permission denied y Id returned 1 exit status
2-Ejecuta pero se bloquea justo en donde he escrito error

Cómo es posible que de error a veces? Podría ser porque al ejecutar el programa y tener k cerrarlo forzosamente en windows, al abrirlo al cabo de poco tiempo la memoria aun no esté lista/libre/disponible/.. ?
Y cómo es posible que funcione o no funcione según el programa???
Utilizo Dev-C 4.9.9.2 y windows XP professional en un p3 con 384mb de RAM (por si ayuda en algo)

Muchas gracias!!