SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Ranma en Domingo 18 de Julio de 2004, 08:31

Título: Re: Punteros En C
Publicado por: Ranma en Domingo 18 de Julio de 2004, 08:31
Hola expertos del foro  :D

Me gustaria saber si por favor me ayudaran en como puedo cambiar la direccion de mas de un puntero usando una función.

Usualmente hago asignaciones de memoria, estas las hago en funciones por ejemplo tengo una cadena char * llamada "Texto".

Pongo el siguiente codigo con la finalidad de que el puntero char * Texto obtenga memoria, esa asignacion la hago para que la funcion que asigna memoria me devuelva la nueva dirección para el puntero, la funcion devuelve el nuevo char * ya que si no lo hago asi y no devuelvo el puntero, el compilador me devuelve excepciones o surgen errores en la memoria.

Código: Text
  1.  
  2. Texto = NuevaMemoria(Texto, ColumnaActual + 1);
  3.  
  4.  

Este seria el codigo que me asigna la nueva memoria:

Código: Text
  1.  
  2.  
  3. unsigned char *NuevaMemoria(unsigned char *Texto, long Tam)
  4. {
  5.    unsigned char *p2;
  6.  
  7.      if ((p2 = (unsigned char *)realloc(Texto, Tam)) == NULL) // Realoja memoria
  8.      {
  9.     if (Texto)  // No hubo memoria suficiente
  10.          free(Texto);
  11.     Texto = NULL;
  12.     printf("Error en memoria, programa interrumpido...");
  13.     exit(1);
  14.      }
  15.      return p2;
  16. }
  17.  
  18.  

¿¿¿Como hago para que la función no tenga que devolver un puntero char * y la variable *Texto pueda asignarse correctamente y pueda cambiar mas punteros en una sola funcion? usando acaso un doble puntero?

 Me podrian hacer el favor de explicarme el procedimiento con listas enlazadas ya que tengo el mismo problema:

Código: Text
  1.  
  2.  
  3. typedef struct elementos * Listadb;
  4.  
  5. Listadb Reubicar(Listadb p, Listadb q, Listadb *pp, long Limite)
  6. {
  7.    long Contx;
  8.      p = *pp;
  9.      for (Contx = 0; Contx < Limite; Contx++) // Llega a la linea Actual
  10.     p = p->Siguiente;
  11.     q = q->Siguiente;
  12.     return p;
  13. }
  14.  
  15.  

¿Como puedo hacer que tanto *p, como *q conserven el valor que les asigno en la función sin tener que devolver ese puntero nuevo?


Gracias por cualquier ayuda  :scream:
Título: Re: Punteros En C
Publicado por: Ruben3d en Domingo 18 de Julio de 2004, 12:44
Hola.

Como has mencionado, necesitas un puntero a puntero, algo así:
Código: Text
  1. void NuevaMemoria(unsigned char **Texto, long Tam)
  2. {
  3.     if ((*Texto = (unsigned char *)realloc(*Texto, Tam)) == NULL) // Realoja memoria
  4.     {
  5.         printf("Error en memoria, programa interrumpido...");
  6.         exit(1);
  7.     }
  8. }
  9.  

Un saludo.

Ruben3d
Título: Re: Punteros En C
Publicado por: Informix en Viernes 23 de Julio de 2004, 22:33
Existen los smart pointers con los cuales puedes hacer multiples asignaciones, en un buen libro de C++ deben venir o en el internet
Título: Re: Punteros En C
Publicado por: Ruben3d en Sábado 24 de Julio de 2004, 00:06
Ranma no está usando C++, está usando C.
Título: Re: Punteros En C
Publicado por: Informix en Sábado 24 de Julio de 2004, 21:07
^_^ es verdad no me di cuenta de ese detalle pero bueno cuando llegue a C++ ya sabra jeje

saludos  :hola: