如何计算动态内存请求是否会导致无效分配
How to calculate if a dynamic memory request will cause an invalid allocation
在尝试使用new进行动态内存分配时,我发现请求的内存量非常大,以至于实现不会抛出bad_alloc异常,只是由于无效的分配错误而崩溃。我尝试使用一个简单的测试分配的大小
if (n >= SIZE_MAX / sizeof(double))
// throw some exception
else
// try to allocate memory
其中n是我试图分配的双倍数,但我发现通过此测试的请求仍然会导致程序崩溃。有没有一个简单的便携式测试可以确定请求是否安全?
谢谢你抽出时间。
编辑:很抱歉,这里有一个程序在我的系统上崩溃的例子。我使用visualstudio2013创建了这个程序。
#include <cstdint>
#include <new>
int main()
{
size_t n = SIZE_MAX / sizeof(double);
double* ptr;
try {
new double[n];
} catch (std::bad_alloc& e){ };
}
我相信你遇到这个错误的原因是因为你试图分配4GB的内存,在visual studio中,你将有一个可以在程序中总共分配的最大大小,这个值可以在配置中更改。如果你尝试在发布模式下运行你的程序,它应该会消失,因为visualstudio没有安全的签入版本。
希望这能帮助
相关文章:
- 我在二维向量中是否正确分配了内存
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 新分配指向函数的指针是否合法?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- std::initializer_list 堆是否分配内存?
- 迭代器是否分配内存(如指针)?
- C 检查值是否分配给了类的成员
- 内存管理 - 添加小部件是否分配父级
- 一般来说,如何找出客户端是否分配了静态Ip或是dhcp客户端
- 未使用的 STL 容器是否分配内存
- 移动是否分配了 std::fstream 关闭原始流
- 我如何知道是否分配了内存插槽
- 要声明指针变量,内存是否分配给指针的名称或指针的地址?
- 宏是否分配内存?
- 是否有一种方法来判断是否分配了内存缓冲区并且必须删除