• Jueves 14 de Noviembre de 2024, 17:20

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Ranma

Páginas: [1]
1
C/C++ / Re: Punteros En C
« 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:

Páginas: [1]