[C con Clase] Punteros, otra vez

Programante programante en gmail.com
Sab Mar 3 17:05:30 CET 2007


Alejandro Vilar López escribió: 
> ¿Por qué sucede esto?
Por como realiza internamente las cosas tu compilador. En realidad 
debería fallar con ambas formas.
No inicializas puntero, por lo que apuntará a "cualquier sitio" (muy 
probablemente que no es tuyo). A continuación haces gets(puntero), con 
lo que se escribe en cualquier sitio un número indeterminado de bytes 
(gets() es insegura, pues se pueden producir desbordamientos de buffer, 
usa en su lugar fgets(puntero, tamaño_del_buffer, stdin)  ).
Cuando intentas escribir en "cualquier sitio", el sistema operativo lo 
detecta y te cierra el programa.


Tienes dos opciones, asignar memoria dinámica al puntero:
char* puntero; //apunta a cualquier sitio
puntero = malloc(tamBuffer); //apunta a tamBuffer bytes de memoria que 
nos da el SO
fgets(puntero, tamaño_del_buffer, stdin); //gets(puntero);
free(puntero); //¡Hay que acordarse de liberar la memoria!


O bien no creando un puntero sino un array:
char antiguo_puntero[tamBuffer];
fgets(antiguo_puntero, tamaño_del_buffer, stdin); //gets(antiguo_puntero);


Un saludo





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