C++向量上的分配错误
allocation error on C++ vector
我正在尝试分配一个包含自身vector<AnotherClass>
的vector<vector<Class>>
,但我得到了一个分配错误,所以我的问题是:变量上给出的max_size()
适用于我程序的所有向量?
我可以通过更改编译器来更改此限制吗?
在这里,我用来检查的代码:
class Couches
{
public:
Couches() : m_value(-1) {}
~Couches() {}
void initialize(const int& value) {
m_value = value;
}
private :
int m_value;
};
class Case
{
public :
Case() {}
~Case() {}
void initialize(const int& hauteur) {
m_couches.resize(hauteur);
for (int i(0); i<hauteur;i++)
m_couches[i].initialize(i);
}
private :
vector<Couches> m_couches;
};
void bug1()
{
vector<vector<Case>> m_cases;
m_cases.resize(5000, vector<Case>(5000));
cout<< m_cases.max_size()<<" " <<5000*5000*20<<endl;
for (int i(0); i<m_cases.size(); i++)
{
for (int j(0); j<m_cases[i].size(); j++)
{
m_cases[i][j].initialize(20);
}
}
}
我有一个 357M <500M 的max_size,我应该创建。
编辑:对不起,伙计们,我说错误,但这是调试器给出的错误:
#1 0x405b36 operator new(unsigned int) () (??:??)
#2 0x490f58 typeinfo for std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > > () (??:??)
#3 0x4761ac std::allocator_traits<std::allocator<Couches> >::allocate(__a=..., __n=0) (D:/CodeBlocks/MinGW/lib/gcc/mingw32/4.9.2/include/c++/bits/alloc_traits.h:357)
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我使用初始化函数,因为它是一个 mcve,在我的原始代码中我需要这个函数。
vector::max_size()
与在没有任何其他内存使用的情况下单个向量可以获得多大有关。您的向量都没有达到该大小。最大的是5000,个人分配5000 * max(sizeof(vector<Case>), sizeof(Case))
对我来说是80,000。
您看到的错误是所有 25,000,000 个Cases
和 500,000,000 个Couches
的总分配超过了程序中的地址空间
max_size()
是可以在向量中放置的最大项目数 此数字受系统位的限制。 如果您使用的是 32 位系统,则2^32 char
值。 您正在达到系统或库实现限制,这就是您获得375M
您应该将std::vector<T>::size_type
用于数组索引
我想你用 32 位编译了你的代码。
这里有一个猜测,为什么要得到341M作为max_size
.典型的实现将获得 SIZE_MAX/sizeof(element_size( 的值。SIZE_MAX是 4GB-1。然后检查包含另一个向量的向量的max_size()
值。典型的 sizeof(vector( 是 12。所以,给出的答案是4GB/12=341M。注意:实现可以提供它想要的任何max_size
值。
以 64 位编译代码,如果您有必要的内存,您的代码将运行。
注意:在您的代码中,您不必担心max_size()
,因为您的向量不包含那么多元素。我的意思是,没有一个向量实例,它有那么多元素。问题是您的总和内存消耗很大,不适合 ~2GB,这是 32 位中典型的最大允许进程大小。所以我认为你的程序内存不足,矢量大小没有问题。
注2:我用了M=2^20,G=2^30
- vector.resize()中的分配错误
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 如何处理以下代码中的内存分配错误
- 动态内存分配错误
- C++向量上的分配错误
- libtorrent file_storage无效:分配错误
- 数组大小分配错误
- 只读位置'__result.std::_Rb_tree_const_iterator<_Tp>::operator*<long long int>()'分配错误
- C++ 内存分配错误?
- 具有特征成员变量分类和分配错误的C 类
- 为什么这种递归子集和算法会导致指针分配错误
- CSTRING分配错误
- 运行时间内存分配错误
- 以下C++代码给出了一些内存分配错误
- 尝试在c++中创建USRP对象时分配错误
- 多阵列动态内存分配错误
- C++:矢量分配错误
- 通过结构指针访问结构变量分配错误数据
- 声明向量时出现神秘的 malloc 内存分配错误