Ошибка превышения лимита памяти
Ошибка превышения лимита памяти : Обычно это происходит, когда не установлен лимит памяти. Это означает, что программа пытается выделить больше памяти, чем лимит памяти для конкретной задачи. Например, если предел памяти составляет 256 МБ , то нет необходимости писать код, требующий более 256 МБ памяти. Как правило, все онлайн-платформы имеют одинаковый лимит памяти в 256 МБ . Может быть еще много причин, из-за которых может возникнуть эта ошибка.
Программа 1:
Ниже приведена программа C++ для объявления глобального одномерного массива размером 10 7 :
Объяснение: Этот код будет успешно скомпилирован и выведет 9999999 , поскольку глобально объявлен одномерный массив размером 10 7 .
Программа 2: Ниже приведена программа на C++ для объявления глобального одномерного массива размером 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; } |
Выход:
Memory Limit Exceeded
или же
Segmentation Fault (SIGSEGV)
Объяснение: в приведенной выше программе пользователи получат ограничение памяти и превышение в виде ошибки, но некоторые онлайн-платформы также могут выдавать ошибку в виде ошибки сегментации ( SIGSEGV ). Это связано с тем, что пользователи могут объявить глобальный одномерный массив только размером 10 7 , не более того. Здесь один объявил глобальный одномерный массив размером 10 8 и, следовательно, имеет место ошибка, поскольку происходит превышение предела памяти (MLE).
Примечание:
- Обратите внимание, что попытка превысить лимит памяти может иногда приводить к другим ошибкам.
- Например, если пользователи используют malloc в C для выделения памяти. Если malloc терпит неудачу из-за того, что пользователь пытается выделить слишком много, он просто возвращает нулевой указатель, который, если его не проверить, вероятно, вызовет ошибку времени выполнения, когда пользователь попытается его использовать.
- Точно так же попытка выделить слишком много памяти в C++ с помощью new вызовет SIGABRT и выдаст ошибку времени выполнения.