Cita:
Iniciado por Eternal Idol int *ivector(nl,nh)
int nl,nh;
{
int *v;
v=( int *)malloc((unsigned) (nh-nl+1)*sizeof( int));
if (!v) nrerror("allocation failure in ivector()");
return v-nl;
}
void free_ivector(v,nl,nh)
int *v,nl,nh;
{
free((char*) (v+nl));
}
Esto esta mal, no podes devolver un puntero a memoria que no tenes asignada: v-nl tenes que devolver v que es lo que te asigno el Sistema Operativo y despues liberar v. Si accedes a esa memoria en debug VC++ te la va a señalar el error como en este caso te esta señalando un error.
Es lo que le he dicho, aparte de todas las cosas extrañas que hace. En cualquier caso... Extraño pero en teoría esas dos funciones son correctas.
El fallo que he visto ahora ha sido el siguiente:
Código:
if (!v) nrerror("allocation failure in ivector()");
Ahí sí, detecta que malloc no ha devuelto memoria libre, pero NO haces return. Devuelves el puntero NULL. Mira a ver cómo te indica la librería el último error, que a lo mejor es eso.