C/Visual C - Problema punteros en C

 
Vista:

Problema punteros en C

Publicado por David (1 intervención) el 24/12/2008 17:33:13
Estoy intentando pasarle un parametro a una función, que dentro de esa función cree un registro en una Pila y que esa función me devuelva, en uno de los parámetros, un puntero al registro que acabo de almacenar. Escribo el código a ver que les parece:

typedef struct ObjectRecord *ptr;

typedef struct ObjectRecord {
char *name;
clase kind;
int link;
union {
struct {
int lowerBound;
int upperBound;
ptr indexType;
ptr elementType;
}AS;
struct {
int constValue;
ptr constType;
}CS;
ptr fieldType;
ptr lastParam;
ptr Lastfield;
ptr varType;
ptr symbolType;
}KU;
} ObjectRecord;

int THash[MAXKEY]; /* Table Hash */
int BlockIndex[MAX_LEVEL]; /* Tabla de bloques */
ObjectRecord PilaSimb[MAXKEY]; /* Pila de simbolos */

esta es la estructura de datos que estoy utilizando. Luego tengo una función, de la siguiente manera:

boolean Insert(char *nameIn, clase kind, int *index, ptr* obj){
boolean error = FALSE;
int pos;
ptr aux;

if ((aux = (ptr) malloc(sizeof(ObjectRecord))) == NULL){
printf("ERROR al asignar memoria");
exit(0);
}
if ((aux->name = (char *) malloc(sizeof(char) * strlen(nameIn))) == NULL){
printf("ERROR al asignar memoria");
exit(0);
}
strcpy(aux->name, nameIn);
aux->kind = kind;

*obj = aux;

...

}

A la hora de asignar a *obj = aux, me compila bien, pero cuando salgo de esta función, no puedo acceder a los datos del registro que apunta *obj, ya que no me deja.

Mi pregunta es: ¿estoy devolviendo bien el puntero para que en *obj tenga, cuando salga de la función, la dirección de memoria de aux, y así poder tener localizado el registro que acabo de insertar? Lo que quiero es poder modificar algunos otros campos del registro, fuera de la función Insert. No se que estoy haciendo mal, ya que estoy desreferenciando obj en:

*obj = aux;

entonces, fuera de la función, estos dos valores deben ser iguales, ya que apuntan a la misma dirección de memoria, pero no es así, no me modifica el ptr *obj y vale lo mismo antes de llamar a la función Insert que después de llamarla.

Y otra cosa: ¿como accedo a los datos del ObjectRecord fuera de la función Insert, con la variable declarada como ptr *obj?

¿qué puedo hacer? muchas gracias por la ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder