Error de límite de memoria excedido : generalmente ocurre cuando no se ha establecido un límite de memoria. Significa que el programa está tratando de asignar más memoria que el límite de memoria para el problema en particular. Por ejemplo, si el límite de memoria es de 256 MB , entonces no es necesario escribir código que requiera más de 256 MB de memoria. Generalmente, todas las plataformas en línea tienen el mismo límite de memoria de 256 MB . Puede haber muchas más razones por las cuales puede ocurrir este error.
Programa 1:
A continuación se muestra el programa C++ para declarar una array 1D global de tamaño 10 7 :
C++
// C++ program to declare the array // of size 10^7 globally #include <bits/stdc++.h> using namespace std; // Variable N initialized const int N = 1e7; // Global array is declared int a[N]; // Driver Code int main() { for (int i = 0; i < N; ++i) { a[i] = i; } cout << a[N - 1]; return 0; }
9999999
Explicación: este código se compilará con éxito y la salida es 9999999 porque la array 1-D se ha declarado globalmente de tamaño 10 7 .
Programa 2: a continuación se muestra el programa C++ para declarar una array 1D global de tamaño 10 8 :
C++
// C++ code declaring a global 1-D // array of size 10^8 #include <bits/stdc++.h> using namespace std; // Variable N is initialized const int N = 1e8; // Global array is declared int a[N]; // Driver Code int main() { for (int i = 0; i < N; ++i) { a[i] = i; } cout << a[N - 1]; return 0; }
Producción:
Memory Limit Exceeded
o
Segmentation Fault (SIGSEGV)
Explicación: en el programa anterior, los usuarios obtendrán un límite de memoria y lo excederán como un error, pero algunas plataformas en línea también pueden generar un error como una falla de segmentación ( SIGSEGV ). Esto se debe a que los usuarios solo pueden declarar una array 1-D global de tamaño 10 7 , no más que eso. Aquí, uno declaró una array 1-D global de tamaño 10 8 y, por lo tanto, tiene un error cuando se excede el límite de memoria (MLE).
Nota:
- Tenga en cuenta que tratar de exceder el límite de memoria a veces puede generar otros errores.
- Un ejemplo sería si los usuarios usan malloc en C para asignar memoria. Si malloc falla porque el usuario está tratando de asignar demasiado, simplemente devuelve un puntero nulo que, a menos que se verifique, probablemente causará un error de tiempo de ejecución cuando el usuario intente usarlo.
- De manera similar, tratar de asignar demasiada memoria en C++ usando new causaría un SIGABRT y daría Run Time Error .
Publicación traducida automáticamente
Artículo escrito por chaitanyatekne5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA