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 */
}