超出内存限制错误
超出内存限制错误:通常在未设置内存限制时发生。这意味着程序正在尝试为特定问题分配比内存限制更多的内存。例如,如果内存限制为256 MB ,则无需编写需要超过 256 MB 内存的代码。通常,所有在线平台的内存限制都与256 MB相同。可能有更多原因导致此错误发生。
方案一:
下面是声明一个大小为 10 7的全局一维数组的 C++ 程序:
C++
// C++ program to declare the array
// of size 10^7 globally
#include
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;
}
C++
// C++ code declaring a global 1-D
// array of size 10^8
#include
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;
}
输出:
9999999
说明:此代码将成功编译并输出9999999,因为已全局声明大小为10 7的一维数组。
程序 2:下面是声明一个大小为 10 8的全局一维数组的 C++ 程序:
C++
// C++ code declaring a global 1-D
// array of size 10^8
#include
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)
说明:在上面的程序中,用户会得到一个内存限制并超过作为错误,但一些在线平台也可以将错误作为Segmentation Fault( SIGSEGV )。这是因为用户只能声明一个大小为10 7的全局一维数组,不能超过。在这里,声明了一个大小为10 8的全局一维数组,因此在超出内存限制 (MLE) 时出现错误。
笔记:
- 请注意,尝试超出内存限制有时可能会导致其他错误。
- 例如,如果用户在 C 中使用 malloc 来分配内存。如果 malloc 由于用户尝试分配过多而失败,它只会返回一个空指针,除非对其进行检查,否则当用户尝试使用它时可能会导致运行时错误。
- 同样,尝试在 C++ 中使用 new 分配过多内存会导致 SIGABRT 并给出运行时错误。
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解语言和 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程。