Los indicadores que cuelgan y los indicadores salvajes en la programación de computadora son los indicadores que no señalan a un objeto válido del tipo apropiado, o a un valor distinguido del puntero nulo en las idiomas que apoyan esto. Los indicadores que cuelgan se presentan cuando un objeto se suprime o se desasigna, sin la modificación del valor del indicador, de modo que el indicador todavía señale a la posición de memoria de la memoria desasignada. Mientras que el sistema puede reasignar la memoria previamente liberada a otro proceso, si el programa original después dereferences (ahora) el indicador que cuelga, el comportamiento imprevisible del puede resultar, mientras que la memoria puede ahora contener datos totalmente diversos. Éste es especialmente el caso si el programa escribe datos a la memoria señalada por un indicador que cuelga, como la corrupción silenciosa de datos sin relación puede resultar, llevando al sutil desinsecta que pueda ser extremadamente difícil de encontrar, o causa las averías (*NIX) de la segmentación o las averías generales (Windows) de la protección. Si los datos sobreescritos son datos de la contabilidad usados por el distribuidor de la memoria de sistema, la corrupción puede causar inestabilidades del sistema. Los indicadores salvajes se presentan cuando un indicador se utiliza antes de la inicialización a un cierto estado sabido, que es posible en algunos lenguajes de programación. Demuestran el mismo comportamiento errático que indicadores que cuelgan, aunque son menos probables permanecer desapercibidos.
En muchas idiomas (particularmente el lenguaje de programación, que C asume el programador tomará el cuidado de todas las ediciones de diseño, y por lo tanto no incluye muchos de los cheques que están presentes en idiomas de alto nivel), la supresión de un objeto de memoria explícitamente o destruyendo el marco de apilado en vuelta no altera ninguna indicadores asociada. El indicador todavía señala a la localización en memoria donde estaba el objeto o los datos, aunque el objeto o los datos se ha suprimido desde entonces y la memoria se puede ahora utilizar para otros propósitos, creando un indicador que colgaba.
Un ejemplo directo se demuestra abajo: lang=" del
Otra fuente frecuente de crear indicadores que cuelgan es una combinación jumbled del malloc () y la biblioteca del free () llama. En tal caso, un indicador llega a ser que cuelga cuando el bloque de memoria que señala a se libera. Como con el ejemplo anterior, unidireccional evitar esto es cerciorarse de fijar el indicador de nuevo a la falta de información después de liberar la memoria, según lo demostrado abajo: lang=" del
Los indicadores salvajes son creados omitiendo la inicialización necesaria antes del primer uso. Así, en realidad, cada indicador en los lenguajes de programación que no hacen cumplir la inicialización comienza como indicador salvaje.
Esto ocurre lo más a menudo posible debido al salto sobre la inicialización, no omitiéndola. La mayoría de los recopiladores pueden advertir sobre esto.
Como insectos del desbordamiento del almacenador intermediario, el colgar/los insectos salvajes del indicador es con frecuencia agujeros de seguridad. Por ejemplo, si el indicador se utiliza para hacer un llamada virtual de la función, una diversa dirección (que señala posiblemente en el código de la hazaña) se puede llamar debido al indicador de Vtable que es sobreescrito. Alternativo, si el indicador se utiliza para escribir a la memoria, un poco de otra estructura de datos puede ser corrompida. Incluso si la memoria se lee solamente una vez el indicador llega a ser que cuelga, puede llevar a los escapes de la información (si los datos interesantes se ponen en la estructura siguiente asignada allí) o escalada del privilegio (si la memoria ahora-inválida se utiliza en controles de seguridad).
Una técnica popular a evitar colgar indicadores es utilizar los indicadores elegantes A que el indicador elegante utiliza típicamente la referencia que cuenta a los objetos de la recuperación. Algunas otras técnicas incluyen el método de las piedras sepulcrales y el método de las Cerradura-y-llaves .
Una alternativa es utilizar el distribuidor intransigente de la memoria, que elimina virtualmente errores del indicador que cuelgan, tan bien como una variedad de otros errores de memoria (como inválido y doble libera).
Otro acercamiento es utilizar el colector de basura de Boehm, un colector de basura conservador que substituya funciones de asignación estándar de memoria en C y el C++ por un colector de basura. Este acercamiento elimina totalmente errores del indicador que cuelgan inhabilitando libera en conjunto, y reclamando objetos por la colección de basura.
En idiomas tener gusto de Java, colgando indicadores no puede ocurrir porque no hay mecanismo para desasignar explícitamente memoria. Algo, el colector de basura puede desasignar memoria, pero solamente cuando el objeto es no más accesible de cualquier referencia.
Para exponer errores del indicador que cuelgan, una técnica de programación común es fijar indicadores al puntero nulo o a una dirección inválida una vez que se ha lanzado el almacenaje que señalan a. Cuando el puntero nulo dereferenced (en la mayoría de las idiomas) el programa terminará inmediatamente - no hay potencial para la corrupción de datos o el comportamiento imprevisible. Esto incurre en la equivocación programada que es la base más fácil encontrar y resolver. Esta técnica no ayuda cuando hay copias múltiples del indicador.
Algunas depuraciones sobreescribirán y destruirán automáticamente los datos que se han liberado, generalmente con un patrón específico, tal como 0xdeadbeef (la depuración visual de C/C++ de Microsoft, por ejemplo, utiliza 0xCC, 0xCD o 0xDD dependiendo se ha liberado de qué).
Las herramientas tales como Valgrind, Mudflap, o LLVM se pueden también utilizar para detectar aplicaciones de colgar indicadores.
| Random links: | Rochester, Minnesota | d'Avranches de Hugh, 1r conde de Chester | Oshino, Yamanashi | Lejos en un pesebre | & de Mendi; Keith Obadike |