Ayuda con unas funciones
Publicado por Nasón (40 intervenciones) el 26/02/2004 00:23:33
Hola de nuevo:
Resulta que tengo que trabajar bastante con matrices y harto de repetir las sentencias de asignación dinámica de memoria he decidido implementar dos funciones: una me permite asignar la memoria necesaria pasándole como argumentos el número de filas y columnas del array y es:
double **asigna_memoria(int fil, int col)
{
int i;
double **a;
//asignación de memoria para el array de punteros
a = (double **)malloc(fil * sizeof(double *));
if (a == NULL)
{
printf ("Insuficiente espacio en memoria");
system("PAUSE");
exit (-1);
}
//asignación de memoria para cada una de las filas
for (i = 0; i < fil; i++)
{
*(a + i) = (double *)malloc (col * sizeof(double));
if (*(a + i) == NULL)
{
printf ("Insuficiente espacio en memoria");
system("PAUSE");
exit (-1);
}
}
return (a);
}
esta, al menos, funciona, aunque la duda que tengo es la siguiente:
¿Es necesario realizar la conversión explícita al tipo de dato devuelto por malloc?. En el libro que tengo (Curso de programación C/C++, de Fco. Javier Ceballos Sierra) pone que el compilador la hace internamente aunque en los ejemplos del mismo libro se hace. Total:
¿escribo a = (double **)malloc(fil * sizeof(double *)); , o me vale simplemente con a = malloc(fil * sizeof(double *)); ?.¿Da igual?, Si hago la conversión explícita en un compilador que ya la hace %E
Resulta que tengo que trabajar bastante con matrices y harto de repetir las sentencias de asignación dinámica de memoria he decidido implementar dos funciones: una me permite asignar la memoria necesaria pasándole como argumentos el número de filas y columnas del array y es:
double **asigna_memoria(int fil, int col)
{
int i;
double **a;
//asignación de memoria para el array de punteros
a = (double **)malloc(fil * sizeof(double *));
if (a == NULL)
{
printf ("Insuficiente espacio en memoria");
system("PAUSE");
exit (-1);
}
//asignación de memoria para cada una de las filas
for (i = 0; i < fil; i++)
{
*(a + i) = (double *)malloc (col * sizeof(double));
if (*(a + i) == NULL)
{
printf ("Insuficiente espacio en memoria");
system("PAUSE");
exit (-1);
}
}
return (a);
}
esta, al menos, funciona, aunque la duda que tengo es la siguiente:
¿Es necesario realizar la conversión explícita al tipo de dato devuelto por malloc?. En el libro que tengo (Curso de programación C/C++, de Fco. Javier Ceballos Sierra) pone que el compilador la hace internamente aunque en los ejemplos del mismo libro se hace. Total:
¿escribo a = (double **)malloc(fil * sizeof(double *)); , o me vale simplemente con a = malloc(fil * sizeof(double *)); ?.¿Da igual?, Si hago la conversión explícita en un compilador que ya la hace %E
Valora esta pregunta


0