La fuga de memoria ocurre en C++ cuando los programadores asignan memoria usando una nueva palabra clave y se olvidan de desasignar la memoria usando la función delete() o el operador delete[] . Una de las pérdidas de memoria más frecuentes se produce en C++ al utilizar un operador de eliminación incorrecto.
El operador de eliminación debe usarse para liberar un solo espacio de memoria asignado, mientras que el operador de eliminación [] debe usarse para liberar una array de valores de datos.
Desventaja con la fuga de memoria:
si un programa tiene fugas de memoria, entonces su uso de memoria aumenta satíricamente, ya que todos los sistemas tienen una cantidad limitada de memoria y la memoria es costosa. Por lo tanto, creará problemas.
Ejemplo de pérdida de memoria en C++
CPP
// Program with memory leak #include <bits/stdc++.h> using namespace std; // function with memory leak void func_to_show_mem_leak() { int* ptr = new int(5); // body // return without deallocating ptr return; } // driver code int main() { // Call the function // to get the memory leak func_to_show_mem_leak(); return 0; }
¿Cómo evitar la pérdida de memoria?
- En lugar de administrar la memoria manualmente, intente usar punteros inteligentes cuando corresponda.
- use std::string en lugar de char *. La clase std::string maneja toda la administración de la memoria internamente y es rápida y está bien optimizada.
- Nunca use un puntero sin formato a menos que sea para interactuar con una biblioteca anterior.
- La mejor manera de evitar pérdidas de memoria en C++ es tener la menor cantidad posible de llamadas nuevas/eliminadas a nivel de programa, idealmente NINGUNA. Cualquier cosa que requiera memoria dinámica debe enterrarse dentro de un objeto RAII que libera la memoria cuando se sale del alcance. RAII asigna memoria en el constructor y la libera en el destructor, de modo que se garantiza que la memoria se desasignará cuando la variable abandone el alcance actual.
- Asigne memoria por palabra clave nueva y desasigne memoria por palabra clave de eliminación y escriba todo el código entre ellos.
Ejemplo para manejar pérdidas de memoria
CPP
// CPP program to // illustrate how to avoid // memory leak #include <bits/stdc++.h> using namespace std; // function to see memory handling void func_to_handle_mem_leak() { int* ptr = new int(5); // body // Now delete pointer ptr using delete delete (ptr); } // Driver code int main() { // Call function to handle // the memory leak func_to_handle_mem_leak() return 0; }
Por lo tanto, escriba siempre el puntero de eliminación para hacer coincidir el nuevo puntero en C++ y siempre escriba el código entre estos nuevos y eliminar como se explica en el ejemplo anterior. En el ejemplo anterior, no se desperdicia memoria porque cuando salimos de la función estamos desasignando la memoria usando la función de eliminación.
Publicación traducida automáticamente
Artículo escrito por ankit15697 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA