• Lunes 18 de Noviembre de 2024, 03:23

Autor Tema:  Re: Punteros En C  (Leído 1521 veces)

Ranma

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Punteros En C
« en: Domingo 18 de Julio de 2004, 08:31 »
0
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:

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Punteros En C
« Respuesta #1 en: Domingo 18 de Julio de 2004, 12:44 »
0
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

Informix

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Punteros En C
« Respuesta #2 en: Viernes 23 de Julio de 2004, 22:33 »
0
Existen los smart pointers con los cuales puedes hacer multiples asignaciones, en un buen libro de C++ deben venir o en el internet
Informix

"Ganar no es algo momentáneo, es algo permanente. Uno no gana de vez en cuando, uno no hace las cosas bien a veces, uno hace las cosas bien siempre" .

Vince Lombardi


Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Punteros En C
« Respuesta #3 en: Sábado 24 de Julio de 2004, 00:06 »
0
Ranma no está usando C++, está usando C.

Informix

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Punteros En C
« Respuesta #4 en: Sábado 24 de Julio de 2004, 21:07 »
0
^_^ es verdad no me di cuenta de ese detalle pero bueno cuando llegue a C++ ya sabra jeje

saludos  :hola:
Informix

"Ganar no es algo momentáneo, es algo permanente. Uno no gana de vez en cuando, uno no hace las cosas bien a veces, uno hace las cosas bien siempre" .

Vince Lombardi