En el lenguaje C, las variables con área de almacenamiento automática (auto, por defecto) se crean en la pila al entrar en el área de su visibilidad (normalmente, una función) y se destruyen automáticamente al salir de ella.
Las características incluyen:
Ejemplo de uso correcto e incorrecto:
int* wrong() { int x = 42; return &x; // ERROR: x será destruido después de salir de la función } void correct() { int y = 123; printf("%d\n", y); // todo bien }
¿Qué pasará si se devuelve de una función la dirección de una variable local?
Respuesta incorrecta común: "El puntero mantendrá su valor".
Respuesta correcta: La dirección devuelta se volverá inválida después de salir de la función, el área de memoria será nuevamente asignada a otras variables automáticas o funciones. Usar tal puntero es un comportamiento indefinido.
Ejemplo:
int* myfunc() { int temp = 10; return &temp; // temp se destruye después del retorno } int main() { int* p = myfunc(); printf("%d\n", *p); // COMPORTAMIENTO INDEFINIDO }
Historia
Historia
Historia
En el firmware de un registrador médico se implementó un caché en la pila para acelerar el procesamiento de datos. Bajo carga, la pila se desbordaba, lo que provocaba un reinicio del dispositivo y la pérdida de datos del paciente.