7.5 Precauciones con los punteros

Punteros no inicializados

Si se altera el valor al que apunta un puntero no inicializado, se estará modificando cualquier posición de la memoria.

main()
{
	int* puntero;
	*puntero = 1200;	/* Se machaca una zona
					   cualquiera de la memoria */
}


Confusión de tipos

Un puntero a un tipo determinado puede apuntar a una variable de cualquier otro tipo. Aunque el compilador lo puede advertir, no es un error.
(Afortunadamente, esto no ocurre en C++).

main()
{
	int p;
	double numero;
	int* puntero;
	
	p = №	/* incorrecto, 
   pero el compilador no aborta */
	*p = 33;		/* Un desastre */
}

Punteros a variables locales fuera de ámbito

Si un puntero apunta a una variable local, cuando la variable desaparezca el puntero apuntará a una zona de memoria que se estará usando para otros fines. Si se desreferencia el puntero, los resultados son imprevisibles y a menudo catastróficos.

main()
{
	int* puntero;

	while (...)
	{
	  int local;
	  puntero = &local;	
  /* ‘puntero’ apunta a una variable local */
	  ...
	  *puntero = 33;		/* correcto */
	}
	...

/* ahora ‘puntero’ apunta a una zona de memoria
   inválida */
	puntero = 50; /* catástrofe */
}