[C con Clase] Punteros, otra vez

Steven Davidson steven en conclase.net
Sab Mar 3 16:41:29 CET 2007


Hola Alejandro,

El pasado 2007-03-03 13:51:39, Alejandro escribió:

A> Bien, vuelvo a tener otro problema con los punteros, y es el siguiente:
A> Yo declaro dos variables char. Una de ellas (la variable, no el puntero)  no la utilizo:
A>                     char a, *puntero;
A> Y luego no tengo ningún tipo de problema, ya que hago lo siguiente:
A>                     gets(puntero);
A> Aparte de esta, uso otras sentencias sobre el puntero. Sin embargo, si yo declaro:
A>                     char *puntero, a;
A> O simplemente:
A>                     char *puntero;
A> Y luego hago lo mismo que al principio (lo de gets(puntero), etc...) al ejecutar el programa y escribir la cadena me sale:
A> "Programa.exe ha detectado un prolema y debe cerrarse"
A> ¿Por qué sucede esto?

Tanto en un caso como en otro, el problema es el mismo: 'puntero' no apunta a una dirección válida. Por lo tanto, 'gets()' está escribiendo caracteres en cualquier lugar arbitrario en memoria, según el valor en 'puntero'. Si quieres usar un puntero, entonces en este caso tendrás que crear memoria dinámicamente. Por ejemplo,

char *puntero = new char[128];
...
delete[] puntero;


Siempre aconsejo inicializar cualesquier variables que crees. Con punteros, inicialízalos a 0 (cero) para que sean punteros nulos.


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase