2017-01-23 48 views
0

有一种方法使用在下面给出的代码初始化为静态存储器,像阵列时以处理存储器错误的存储器的情况呢?处理出与静态数组存储器C++

namespace x{ 
static unsigned char arr[9999999]; // how to catch etc. if there is out of memory exception 

}; 
+1

这是那些情况下,最好的答案是这样做摆在首位之一。 –

+0

不要这样做。只需使用'std :: vector'。 –

回答

3

没有办法检测到;你的程序要么会崩溃。无法加载,或进入UB的土地。希望如果你的平台的大小是完全荒谬的,你的编译器会在编译时对它进行诊断,但不一定。

+0

@Serg静态对象未在堆栈上分配 –

+0

正确。我的不好,我误解了代码。 – SergeyA

1

当您编译和链接的可执行文件,代码包括执行步骤来创建你的全局和静态数据结构前,你的程序是有史以来您main()函数的方式调用。你说的阵列的施工前被执行任意代码的会发生,并会为此结果,这将是在你的代码无法捕获的,如果开捕在所有的问题。

0

有不可能是任何超出内存问题,给定的代码。所有这将要做的就是声明一个相当大的象征,通常,程序行为将无异于只是有一个程序,它是太大,加载到内存的不同 - 装载机会抱怨。但是样本的大小根本不大。