C ++内存不足异常测试

时间:2015-02-23 01:42:50

标签: c++ exception terminal out-of-memory bad-alloc

我在C ++中使用数组编写了一个双端队列程序。赋值的一个要求是处理异常。

我们应该检查的一个例外是内存不足异常。

由于它是一个动态大小的队列,我有一个方法,当数组变满时,该方法的大小加倍。 像这样:

try{
    doubleArray();
} catch (bad_alloc& e) {
    throw bad_alloc();
}

在主文件中,throw的{​​{1}}被捕获。

我不知道如何测试这是否有效。 我正在使用带有X代码的Mac,并且还使用Mac终端来编译和测试文件。 有谁知道如何测试这个例外?即在这两个平台中设置内存限制或某些内容?或者即使我做得对吗?

编辑(更多信息):

这是我bad_alloc的实现:

doubleArray

因此,当新阵列(原始数组的大小加倍)被分配时,可能存在内存不足的情况。 这就是我做的原因:

void Deque<T>:: doubleArray(){
int newSize = size_of_Deque * 2;
T *newElement = new T[newSize];

int temp = front;
int begin = (newSize/4);
front = begin;
int end = size_of_Deque + begin - 1;

while (begin<=end) {
    newElement[begin] = element[temp];
    begin++;
    temp = (temp + 1)% size_of_Deque;
}

element = newElement;
back = end;
size_of_Deque = newSize;
delete [] newElement;


}

同样,我的主要问题是我不知道如何测试它是否有效。有没有办法在终端或X-code中设置内存限制?

2 个答案:

答案 0 :(得分:0)

你可以

throw std::bad_alloc{};

您计划中的任何地方,例如如果队列变大或随机。例如:

void doubleArray () {
    if (queueIsLarge) {
        throw std::bad_alloc("Thrown for test purposes.");
    }
    // Do the double array logic
}

将表现为由queueIsLarge确定的人为记忆限制。

答案 1 :(得分:0)

创建一个

的测试程序
  1. 创建对象的实例
  2. 调用doubleArray()将大小增加到某个数字,比如65kb(如何执行此操作取决于数据结构的API)
  3. 检查std::bad_alloc是否被抛出
  4. 在受限制的内存环境中运行测试程序

    1. 创建用户
    2. 在终端中,执行ulimit -m 64。这将当前用户可用的内存量限制为64 kb。数量取决于您在上面的步骤2中选择的内容。
    3. 以该用户
    4. 运行程序