向量初始化期间未知应用程序失败

时间:2015-12-11 10:37:03

标签: c++ vector initialization

我正在尝试按如下方式初始化一个向量:

vector<int> vect(n, 2);

此语句初始化vect以包含nint个元素,其值为2nsize_t类型的变量,已经过检查以确保n <= vect.max_size()始终为真。

我目前正在Code :: Blocks上测试我的代码。它适用于n的任意小值,但当我尝试在n = vect.max_size()的IDE中运行它时,程序终止,说发生了未知的应用程序错误,并与开发人员交谈(我)。

有谁知道出了什么问题?这不是在运行时将矢量初始化为最大尺寸的正确方法吗?我查了一下,我的数学是正确的,n没有超过vect.max_size()

1 个答案:

答案 0 :(得分:2)

max_size()成员在某种程度上是理论限制。在具有大量内存的机器上,可以创建具有相应大小的容器,但通常使用现代技术是不可能的。

max_size()存在的原因在历史的迷雾中几乎消失了。我怀疑当开发STL并且使用“小”指针(类似__small int*)实例化容器时,该值是有意义的:在那个时候,某些平台有指针类型不同大小的,例如,16位“小”和32位“大”指针。

我认为没有一种实用的方法来确定可以分配的容器的最大大小。最好的情况是,您可以执行类似二进制搜索的操作,尝试创建具有一定大小的容器并捕获std::bad_alloc:很可能是您的“应用程序错误”和未被捕获的异常类型。

相关问题