C++ 内存不足异常测试
C++ Out of Memory Exception Test
我在C++中使用数组编写了一个双端队列程序。作业的要求之一是处理异常。
我们应该检查的异常之一是内存不足异常。
因为它是一个动态大小的队列,所以我有一个方法可以在数组变满时将其大小加倍。
像这样:
try{
doubleArray();
} catch (bad_alloc& e) {
throw bad_alloc();
}
在主文件中,bad_alloc
的 throw
被捕获。
我不知道如何测试这是否有效。
我正在使用带有 X 代码的 Mac 并且还使用 Mac 终端来编译和测试文件。
有谁知道如何测试这个异常?即在这些平台中的任何一个中设置内存限制或其他内容?或者即使我做得对还是不对?
编辑(更多信息):
这是我对 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;
}
因此,当分配新数组(原始数组大小的两倍)时,可能会出现内存不足的情况。
这就是我这样做的原因:
try{
doubleArray();
}catch (bad_alloc& e) {
throw bad_alloc();
}
同样,我的主要问题是我不知道如何测试它是否有效。有没有办法在终端或 X 代码中设置内存限制?
你可以
throw std::bad_alloc{};
你想在你的程序中的任何地方,例如如果队列变大或随机。例如这样的事情:
void doubleArray () {
if (queueIsLarge) {
throw std::bad_alloc("Thrown for test purposes.");
}
// Do the double array logic
}
就像由 queueIsLarge
决定的人为内存限制。
创建一个测试程序
- 创建对象实例
- 调用
doubleArray()
将大小增加到某个数字,例如 65kb(您将如何执行此操作取决于您的数据结构 API)
- 检查
std::bad_alloc
是否被抛出
到运行受限内存环境中的测试程序
- 创建用户
- 在终端中,执行
ulimit -m 64
。这将当前用户可用的内存量限制为 64 kb。数量取决于您在上面的第 2 步中选择的内容。
- 运行 作为该用户的程序
我在C++中使用数组编写了一个双端队列程序。作业的要求之一是处理异常。
我们应该检查的异常之一是内存不足异常。
因为它是一个动态大小的队列,所以我有一个方法可以在数组变满时将其大小加倍。 像这样:
try{
doubleArray();
} catch (bad_alloc& e) {
throw bad_alloc();
}
在主文件中,bad_alloc
的 throw
被捕获。
我不知道如何测试这是否有效。 我正在使用带有 X 代码的 Mac 并且还使用 Mac 终端来编译和测试文件。 有谁知道如何测试这个异常?即在这些平台中的任何一个中设置内存限制或其他内容?或者即使我做得对还是不对?
编辑(更多信息):
这是我对 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;
}
因此,当分配新数组(原始数组大小的两倍)时,可能会出现内存不足的情况。 这就是我这样做的原因:
try{
doubleArray();
}catch (bad_alloc& e) {
throw bad_alloc();
}
同样,我的主要问题是我不知道如何测试它是否有效。有没有办法在终端或 X 代码中设置内存限制?
你可以
throw std::bad_alloc{};
你想在你的程序中的任何地方,例如如果队列变大或随机。例如这样的事情:
void doubleArray () {
if (queueIsLarge) {
throw std::bad_alloc("Thrown for test purposes.");
}
// Do the double array logic
}
就像由 queueIsLarge
决定的人为内存限制。
创建一个测试程序
- 创建对象实例
- 调用
doubleArray()
将大小增加到某个数字,例如 65kb(您将如何执行此操作取决于您的数据结构 API) - 检查
std::bad_alloc
是否被抛出
到运行受限内存环境中的测试程序
- 创建用户
- 在终端中,执行
ulimit -m 64
。这将当前用户可用的内存量限制为 64 kb。数量取决于您在上面的第 2 步中选择的内容。 - 运行 作为该用户的程序