C/Visual C - Problemas con punteros

   
Vista:

Problemas con punteros

Publicado por charlx (2 intervenciones) el 27/07/2011 07:21:46
Buenas, tengo un problema con un programa, está muy corto y simple:

#include <stdio.h>
#include <conio.h>
main()
{
int *pint, *pint2;
printf("\n Dirección de memoria de pint: %p \n",&pint);
printf("\n Dirección de memoria de pint2: %p \n",&pint2);
*pint=10;
*pint2=6; //<---- Parece que este es el problema
printf("\n Valor de pint: %d \n",*pint);
printf("\n Valor de pint2: %d \n",*pint2);
pint2=pint;
printf("\n Atención acabo de igualar los dos punteros \n");
printf("\n Dirección de memoria de pint: %p \n",pint);
printf("\n Dirección de memoria de pint2: %p \n",pint2);
printf("\n Valor de pint: %d \n",*pint);
printf("\n Valor de pint2: %d \n",*pint2);
getch();
}

lo ejecuto con el Dev-C++ 4.9.9.2, en sí no hay ningún problema de compilación, no marca errores e igualmente no le veo ningún problema, pero por alguna razón siempre se traba a la hora de ejecutarse y me sale un mensaje de error por lo que finaliza la ejecución. Sí me muestra los dos primeros mensajes pero luego me sale el clásico de que se ha detectado un problema y debe cerrarse.

Por alguna razón no me sale el error si quito la parte en la que le asigno un valor a pint2 (pint2=6), por lo que creí que no puede trabajar con dos punteros a la vez (lo cual de por sí ya sería extraño), pero si elimino el del primer pint (pint=10) y dejo el segundo (pint2) me sigue marcando el mismo problema y cierra y la ejecución. ¿Será algún problema del propio IDE o del compilador?, es muy raro que solo sea por esa asignación.

Quizá si alguien más lo copia y corre para ver si le sale el error, se los agracezo si alguien sabe porque sucede este problema.
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

Problemas con punteros

Publicado por Tom (481 intervenciones) el 27/07/2011 10:21:26
Estás usando punteros que no sabes a qué apuntan.

Cuando "escribes" en el segundo puntero seguramente estás machacando código.
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

Problemas con punteros

Publicado por charlx (2 intervenciones) el 27/07/2011 16:28:26
Aún no entiendo bien esto de los punteros, cuando se declara el primer puntero no hay problema pero con el segundo es cuando surge el problema y es porque no tienen a que apuntar, ¿osease que el compilador solo puede tratar con uno solo y no puede con otro ya que trataría de solapar ambos punteros?
Sea como sea trate de darle algo con que apuntar y ya funcionó sin problemas:

#include <stdio.h>
#include <conio.h>
main()
{
int *pint;
int *pint2;
int num=25;
printf("\n Dirección de memoria de pint: %p \n",&pint);
printf("\n Dirección de memoria de pint2: %p \n",&pint2);
*pint=10;
pint2=&num;
printf("\n Valor de pint: %d \n",*pint);
printf("\n Valor de pint2: %d \n",*pint2);
pint2=pint;
printf("\n Atención acabo de igualar los dos punteros \n");
printf("\n Dirección de memoria de pint: %p \n",pint);
printf("\n Dirección de memoria de pint2: %p \n",pint2);
printf("\n Valor de pint: %d \n",*pint);
printf("\n Valor de pint2: %d \n",*pint2);
getch();
}

eso significa que siempre que declare más de dos punteros y los utilice de esta forma, ¿debo crear variables a la cual los punteros extras apunten para evitar conflictos?
Gracias por tu respuesta y espero haber entendido esto.
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

Problemas con punteros

Publicado por Marco (1 intervención) el 24/08/2011 19:29:00
El problema está desde que usas por primera vez el puntero de esta forma. Tu puntero debe tener asignada memoria para poder usarlo, quizás el error se refleje en la línea que indiocas, pero el error exisrte desde antes, seguramente las condiciones de memoria hacen que se presente de esa manera, probablemente tu primer puntero se asigne al definirse a una localidad de memoria que no esté asignada y por eso no hace gestos, pero el segundo de seguro apunta a una localidad asignada y es entonces cuando se quievbra el programa. Nunca uses punteros a los que no les has asignado memoria o bien les has asignado la dirección de una variable ya definida.
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