¿Cómo comprobar si la memoria a la que apunta el puntero se ha desasignado con éxito?Cómo comprobar la desasignación de memoria
Respuesta
En pocas palabras: no se puede.
Echa un vistazo a herramientas como Valgrind para ayudarlo a solucionar problemas de pérdida de memoria.
Algunas otras cosas que usted debe considerar:
- utilizar punteros inteligentes para que usted no tiene pienses en la gestión de memoria,
- Establecer sus punteros a 0 después de que los libres, de modo que un mayor
delete
no tiene ningún efecto, - use clases estándar (
vector
, ...) en lugar de rodar su propia, - Por último, no utilice punteros (en realidad casi se puede)
¿Cómo ayuda la configuración de los indicadores a 0 ayudar con este problema? –
Para evitar problemas dobles gratis. Podría ser lo que OP quiere después de todo. –
Es una pena establecer los punteros a 0 es un UB. –
Lo sentimos respuesta, muy corto "No se puede"
Utilice la herramienta IBM rational purify para verificar la correcta desasignación de memoria.
- Algunas herramientas que realizan análisis de código estático pueden señalar algunos problemas relacionados con la desasignación de memoria.
- Uso valgrind para comprobar si tiene pérdidas de memoria
- Evitar punteros primas - utilizar punteros inteligentes en lugar
Definir correctamente! Definir desasignado!
Después de desasignar la memoria (ya sea que esté libre o eliminada) no debe usar ese puntero nuevamente. Todas las otras suposiciones son irrelevantes.
Después de todo, se llama a la/C++ en tiempo de ejecución C para cancelar la asignación de memoria, pero el/C++ en tiempo de ejecución C también llamadas funciones del sistema operativo para liberar a la página. Incluso podría tener un asignador de memoria personalizado en la parte superior del tiempo de ejecución de C/C++ que, p. usa el almacenamiento en caché para implementar un algoritmo de asignación de memoria más rápido.
Todas estas capas pueden mantener la memoria desasignada por sí mismas (debido a la fragmentación o simplemente porque les gusta guardarla para sí mismas) o pueden indicarle a la capa subyacente que la desasigne. Puede suceder cualquier cosa, simplemente no use ese puntero nunca más.
En C++, puede asumir con seguridad que la desasignación nunca falla. Los destructores no deben arrojar excepciones, y la memoria real reservada nunca debe dejar de publicarse, por lo tanto, dados esos dos puntos, nada puede salir mal.
Sin embargo, si elimina un puntero que ya ha sido eliminado, su programa probablemente falle. Sin embargo, esto no es un problema con la desasignación: el delete
original funcionó correctamente. Es un problema con la gestión de la memoria del programa si se intenta eliminar un puntero dos veces, pero eso es raramente necesaria con STL modernos y punteros inteligentes como std::vector
, std::unique_ptr
, etc ...
El manejo de excepciones. Es decir. probar/atrapar bloques.
Incorrecto; un destructor no debe lanzar una excepción, entonces esto no hará nada. –
buen punto. Gracias. –
- 1. Desasignación de memoria y excepciones
- 2. Desasignación de memoria UNIX vs Windows
- 3. objetivo-c desasignación de memoria singleton
- 4. memoria desasignación con std :: vector reasignación
- 5. asignación de memoria C# y patrones de desasignación
- 6. Asignación de memoria y desasignación a través de subprocesos
- 7. C# Pregunta asignación/desasignación de memoria con respecto al alcance
- 8. equivalente de tiempo para comprobar la memoria
- 9. herramientas para comprobar la fragmentación de memoria
- 10. Cómo comprobar la cantidad de memoria RAM en I
- 11. Cómo comprobar y comprobar la cantidad de memoria que se filtra una aplicación de JavaScript
- 12. ¿Es posible rastrear asignación/desasignación?
- 13. ¿Las rutinas de desasignación de memoria tocan la liberación del bloque?
- 14. Asignación y desasignación de memoria en código no administrado utilizando la plataforma Invoke (C#)
- 15. ¿Por qué la desasignación es lenta?
- 16. Java todavía utiliza la memoria del sistema después de la desasignación de objetos y la recolección de basura
- 17. Asignación y desasignación de memoria a través de los límites de dll
- 18. ¿Cómo comprobar si la aplicación está unida a la CPU o ligada a la memoria?
- 19. cómo verificar la corrupción de la memoria en C++
- 20. Reemplazar la codificación declarada durante la desasignación con JAXB
- 21. Desasignación de las asignaciones del complemento Vim
- 22. Comprobar el uso de memoria del subproceso en Python
- 23. por qué el compilador difiere std :: list desasignación?
- 24. Cómo comprobar la conexión FTP?
- 25. Forzar la desasignación de un objeto de caché grande en Java
- 26. C# Windows CE .net 3.5 para comprobar el uso de la memoria
- 27. Desasignación total de un singleton de Objective-C
- 28. C++ pérdida de memoria compartida, ¿cómo borrar la memoria compartida?
- 29. ¿Cómo comprobar si los iteradores forman una zona de memoria contigua?
- 30. cómo asignar correctamente la memoria en C++ en condiciones de poca memoria
Más detalles necesarios: ¿cómo se asignó inicialmente la memoria? y * ¿por qué * necesita verificar si ha sido desasignado? –
En la capa de aplicación, no puede. Sin embargo, si está trabajando en algunas capas de kernel de muy bajo nivel, podría haber formas de hacerlo. – Chubsdad
Yeap, ¿cuál es el verdadero problema que está tratando de resolver? – sharptooth