C/Visual C - AYUDA! - PROBLEMA CON MEMORIA

 
Vista:

AYUDA! - PROBLEMA CON MEMORIA

Publicado por matias (1 intervención) el 13/09/2006 03:52:53
Hola, estoy con un proyecto en Borland C++.

Consta de una simulacion de un estacionamiento, pero en un entorno "visual" (estilo de ventana...) y use pilas y el mouse.

Para usar el mouse tuve que programar en assembler...asi que algunas funciones trabajaban sobre el lugar de memoria de alojamiento del mouse, provocando que las variables cambiaran.

Entonces comence a usar la funcion "MALLOC". Al usar esta funcion, debo hacer q cada variable que declare con MALLOC sea un puntero.

Mi problema esta en que en funciones como el GOTOXY, o en una simple funcion, la variable sigue tomando cualquier valor.

EL EJEMPLO ES ESTE (una funcion que hace la animacion de un cochecito, luego de cliquearlo):
/* Xinicio es la variable que indica en q posicion X estaba el coche originalmente
Lo mismo para Yinicio (indica la pos en Y) */

void MoverCoche(int *Xinicio,int *Yinicio,pila *p)
{
int aux;
int auxx;
int auxxx;
int auxxxx;
Xinicio=(int *)malloc(24);
Yinicio=(int *)malloc(24); /* me detengo aca y usando WATCHES miro el estado de la
variable Yinicio...y me aparece -31513!! (cuando deberia ser
entre 10 y 22 masomenos)
int *aa;
aa=(int *)malloc(24);
//************* MoViMiEnTo 1 ****************
textbackground(11);
aux=*Xinicio;
auxx=*Yinicio;
gotoxy(aux,auxx+1);cprintf("%i",B);
textbackground(7);
gotoxy(aux,auxx);cprintf(" ");
textbackground(11);
delay(50);
gotoxy(aux,auxx+2);cprintf("%i",B);
textbackground(7);
gotoxy(aux,auxx+1);cprintf(" ");
//************* MoViMiEnTo 2 ****************
textbackground(11);
aux=22;
if(*Xinicio<=aux)
{
for(*aa=*Xinicio;*aa<23;*aa++)
{

[...]


POR FAVOR NECESITO AYUDA!!... alguien podria explicarme por favor por qué sucede esto y que debo hacer????????????????????????????????????????????????

(si necesitan algun dato mas o no entienden mi "intento de explicacion" avisenme x favor...)

MUCHAS!!! gracias x adelantado... =D
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

RE:AYUDA! - PROBLEMA CON MEMORIA

Publicado por Ion (1 intervención) el 13/09/2006 08:55:02
Por lo que veo, dices que las posiciones (Xinicio, Yinicio) iniciales se las pasas a la función como parámetro de entrada... ¡¡pero también las usas para guardar la dirección de memoria del malloc!!
Creo que por ahí podría venir tu problema.

//CUIDADO! AQUÍ YA NO VALEN LO QUE TU ESPERAS, PORQUE HAS LLAMADO A MALLOC ANTES
aux=*Xinicio;
auxx=*Yinicio;

Otra cosa que te recomiendo, al llamar a malloc, NO pongas directamente el tamaño a reservar. Aunque en tu plataforma un int ocupe 24 bits, puede que en otras no. Usa "sizeof", así tu código será algo más portable.

Resumiendo, prueba algo así...

void MoverCoche(int *Xinicio,int *Yinicio,pila *p)
{
int aux;
int auxx;
int auxxx;
int auxxxx;

//SALVA VALORES INICIALES ANTES DE MALLOC
aux=*Xinicio;
auxx=*Yinicio;

//Y LUEGO LLAMA A MALLOC
int * Xtemporal=(int *)malloc(sizeof(int));
int *Ytemporal=(int *)malloc(sizeof(int));
...
aa=(int *)malloc(sizeof(int));
...

Saludos y ¡suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar