矢量初始化期间出现未知应用程序故障

Unknown application failure during vector initialization

本文关键字:未知 应用程序 故障 初始化      更新时间:2023-10-16

我正在尝试初始化一个向量,如下所示:

vector<int> vect(n, 2);

此语句初始化vect以包含值为2int类型的n元素。n是类型为size_t的变量,已对其进行检查以确保n <= vect.max_size()始终为真。

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

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

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

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

我认为没有一种实用的方法来确定可以分配的容器的最大大小。充其量,您可以做一些类似二进制搜索的事情,尝试创建一个具有一定大小的容器并捕获std::bad_alloc:很可能是您的"应用程序错误"和该类型的未捕获异常。