C/Visual C - Duda con Malloc y Free.

 
Vista:

Duda con Malloc y Free.

Publicado por Jordi (20 intervenciones) el 22/05/2001 15:55:33
Tengo una duda en el siguente código:

Mi función recibe dos parámetros, el que me interesa en este momento es \"grad\". Resuta ser que \"grad\" será la cantidad de columnas de un array multidimensional llamado \"*Datos[pos]\" sobre el cual necesito reservar memoria.

int *Datos[10]; /*variable global*/

guardar(int num[],int grad)
{
int col=0,nbytes=0;

nbytes = grad*sizeof(int);
if ((Datos[pos] = (int *)malloc(nbytes))== NULL)
{
printf(\"Insuficiente espacio de memoria\\n\");getche();exit(0);
}
*(*(Datos+pos)+col)=grad; /*Guardamos Grado en 1ra. posicion Aray*/
for(col=0; col<=grad; col++)
{
*(*(Datos+pos)+col+1)=num[col];
}

pos++; /*contador de memorias*/
printf(\"\\n GUARDADO EN MEMORIA - POSICION %d : \",pos);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda con Malloc y Free.

Publicado por Bleach (29 intervenciones) el 22/05/2001 16:15:26
Hola que tal:

Viendo el codigo veo que reservas memoria para:
nbytes = grad*sizeof(int);

es decir reservas grad posiciones de memoria pero luego haces:
for(col=0; col<=grad; col++)
{
*(*(Datos+pos)+col+1)=num[col];
}

Con lo que necesitas grad+2,
soluciones:

nbytes = (grad+1)*sizeof(int);
/*....*/
for(col=0; col<grad; col++)
{
*(*(Datos+pos)+col+1)=num[col];
}

Recuerda que los arrays de tamaño n van desde 0 hasta n-1
Espero te sirva un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con Malloc y Free.

Publicado por Jordi (20 intervenciones) el 22/05/2001 17:31:38
No me has dado tiempo, acababa de llegar a la misma conclusión y funciona, me he dado cuenta al pasar el valor de grado=0.
Muchas gracias por tu rápida respuesta.
Jordi.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar