Bueno amigos, ya tengo el codigo funcionando y va mejor de lo que pensaba jajaja. Solo tengo una duda y es que para obtener memoria y para liberarla uso unas funciones que son copias casi identicas a excepcion del tipo de retorno y del tipo de un parametro de entrada.
Aqui las funciones:
Código PHP:
//Libera la memoria de un array de enteros
int** LiberarMemoria(int **dir, int nFilas, int nColumnas)
{
int i;
if( dir != NULL ){
for ( i = 0; i < nFilas; i++ )
{
if (dir[i] != NULL)
{
free(dir[i]);
}
}
}
free(dir);
dir=NULL;
return dir;
}
//Libera la memoria de un array de cadenas
char** LiberarMemoriaCadenas(char **dir, int nFilas, int nColumnas){
int i;
if( dir != NULL ){
for ( i = 0; i < nFilas; i++ )
{
if (dir[i] != NULL)
{
free(dir[i]);
}
}
}
free(dir);
dir=NULL;
return dir;
}
//Obtiene memoria para almacenar un array de cadenas
char** ObtenerMemoriaCadenas(char **dir, int nFilas, int nColumnas){
int Error=false, i;
if(( dir = (char**)malloc(nFilas*sizeof(char*))) == NULL){
Error = true;
}else{
for ( i = 0; i < nFilas; i++ ){
if(( dir[i] = (char*)malloc(nColumnas)) == NULL )
Error = true;
}
}
if(Error){
dir = LiberarMemoriaCadenas(dir, nFilas, nColumnas);
}
return dir;
}
//Obtiene memoria para almacenar un array de punteros a enteros
int** ObtenerMemoria(int **dir, int nFilas, int nColumnas){
int Error=false, i;
if(( dir = (int**)malloc(nFilas*sizeof(int*))) == NULL){
Error = true;
}else{
for ( i = 0; i < nFilas; i++ ){
if(( dir[i] = (int*)malloc(nColumnas)) == NULL )
Error = true;
}
}
if(Error){
dir = LiberarMemoria(dir, nFilas, nColumnas);
}
return dir;
}
¿alguna manera sencilla de hacer que una funcion sirva para ambos casos al obtener memoria y otra sola funcion sirva para liberarla?