📌  相关文章
📜  超出内存限制错误

📅  最后修改于: 2022-05-13 01:55:00.815000             🧑  作者: Mango

超出内存限制错误

超出内存限制错误通常在未设置内存限制时发生。这意味着程序正在尝试为特定问题分配比内存限制更多的内存。例如,如果内存限制为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 等的准备工作,请参阅完整的面试准备课程