Problema urgente de Tesis
El problema consiste en lo siguiente: Soy programador de C++, y empece una carrera donde enseñan Object Pascal, me traduje al Pascal. Ahora estoy en epoca de Tesis final, y decidi hacerla en C++ (lo bueno nunca es viejo). El problema es muy simple... no me acuerdo C++... Mejor dicho no me acuerdo mucho lo de punteros. Estos dos lenguajes lo manejan distinto. La cuestión es la siguiente, presten atención asi me entienden:
Ejemplo simple de mi problema.
- quiero enviar un puntero vacio (que no apunta a nada importante o sea que apunta a NULL) por referencia a un método (función o procedimiento). Ahora bien, dentro de este le tengo que asignar espacio con "new", y devolver el puntero apuntando a algo. Lo mismo, pero inverso para eliminarlo.
En realidad se trata de un especie de pila, pero no los quiero complicar tanto. Aca el tema está en que un metodo sea para crear y otro para eliminar, teniendo el control de la pila en un solo puntero.
Les escribo algo de codigo para que me entiendan mejor.
struct T1{int a; T1*Next;}
void Crear(T1*x)
{
if( x == NULL) x = new T1;
}
void Eliminar(T1*x)
{
if( x != NULL) delete x;
}
void Funcion()
{
T1*x;
x = NULL;
Crear(x);//quiero que x vuelva "lleno"
ShowMessage(IntToStr(x->a));//aca hay error
Eliminar(x);
}
Gracias por su atencion. Gastón
Ejemplo simple de mi problema.
- quiero enviar un puntero vacio (que no apunta a nada importante o sea que apunta a NULL) por referencia a un método (función o procedimiento). Ahora bien, dentro de este le tengo que asignar espacio con "new", y devolver el puntero apuntando a algo. Lo mismo, pero inverso para eliminarlo.
En realidad se trata de un especie de pila, pero no los quiero complicar tanto. Aca el tema está en que un metodo sea para crear y otro para eliminar, teniendo el control de la pila en un solo puntero.
Les escribo algo de codigo para que me entiendan mejor.
struct T1{int a; T1*Next;}
void Crear(T1*x)
{
if( x == NULL) x = new T1;
}
void Eliminar(T1*x)
{
if( x != NULL) delete x;
}
void Funcion()
{
T1*x;
x = NULL;
Crear(x);//quiero que x vuelva "lleno"
ShowMessage(IntToStr(x->a));//aca hay error
Eliminar(x);
}
Gracias por su atencion. Gastón
Gracias a los dos. Ahora puedo seguir con la tesis.
Por cierto alejandro, el error era consecuencia del mal acceso, por lo tanto se soluciona con la buena implementación del otro amigo. chau.
Por cierto alejandro, el error era consecuencia del mal acceso, por lo tanto se soluciona con la buena implementación del otro amigo. chau.
Si desea invocar a Crear(x) asi como lo puso en su función Funcion(), debería de tener la función Crear implementada de la sgte manera:
/* el & sirve para que el puntero que le entra como parámetro a la función sea modificado */
void Crear(T1 *&ptr) {
ptr = new T1;
// no es necesario que ptr->a sea igual a 0
ptr->a = 0;
ptr-Next = NULL;
}
Si desea que su función Crear devuelva un puntero, la función debería ser implementada de la manera sgte:
T1 *Crear() {
T1 *ptr = NULL;
ptr = new T1;
// no es necesario que ptr->a sea igual a 0
ptr->a = 0;
ptr->Next = NULL;
return ptr;
}
así, en la función Funcion() debería invocar a crear de la sgte manera:
x = Crear();
Suerte
/* el & sirve para que el puntero que le entra como parámetro a la función sea modificado */
void Crear(T1 *&ptr) {
ptr = new T1;
// no es necesario que ptr->a sea igual a 0
ptr->a = 0;
ptr-Next = NULL;
}
Si desea que su función Crear devuelva un puntero, la función debería ser implementada de la manera sgte:
T1 *Crear() {
T1 *ptr = NULL;
ptr = new T1;
// no es necesario que ptr->a sea igual a 0
ptr->a = 0;
ptr->Next = NULL;
return ptr;
}
así, en la función Funcion() debería invocar a crear de la sgte manera:
x = Crear();
Suerte
