C++ 即使在调整2D向量大小后仍抛出std bad_alloc

C++ 即使在调整2D向量大小后仍抛出std bad_alloc,c++,class,vector,bad-alloc,C++,Class,Vector,Bad Alloc,我有以下代码: struct elements { char status; int value; }; class matrix { vector<vector <elements> > mat; int varNum; int ConNum; public: void resetmatrix(int varnum, int connum) { varNum = varnum; Co

我有以下代码:

struct elements
{
    char status;
    int value;
};
class matrix
{
    vector<vector <elements> > mat;
    int varNum;
    int ConNum;
public:
    void resetmatrix(int varnum, int connum)
    {
        varNum = varnum;
        ConNum = connum;
        mat.resize(connum, vector<elements>(varnum) );
    }
    matrix(int x, int y)
    {
        varNum = 0;
        ConNum = 0;
    }
};
matrix mat(0,0);

int main(int argc, char *argv[])      //main function
{
    int variables,cubes;
    variables=25;
    cubes= 10000000;
    cout<<"Variables= "<<variables<<endl<<"Cubes= "<<cubes<<endl;
    mat.resetmatrix(variables, cubes);
    cout<<"hello";
    return 0;
}
struct元素
{
字符状态;
int值;
};
类矩阵
{
向量矩阵;
int-varNum;
内部连接;
公众:
无效重置矩阵(int varnum,int connum)
{
varNum=varNum;
ConNum=ConNum;
mat.resize(connum,vector(varnum));
}
矩阵(整数x,整数y)
{
varNum=0;
ConNum=0;
}
};
矩阵mat(0,0);
int main(int argc,char*argv[])//主函数
{
int变量,立方体;
变量=25;
立方体=10000000;

你可能要求2GB,这对你的电脑来说太多了吗?你是在编译32位还是64位的程序?我的笔记本电脑有16 GB,而我正在编译一个32位的程序。我应该在另一台规格更好的电脑上试用吗?即使在64位以下要求这么多连续的RAM也会带来麻烦。在32位以下,这可能几乎不起作用,但我不会合作unt在它上面。任何将这些alloc拆分一位的方法-10 200M alloc比1 2G alloc更容易制作。如果运行32位,16gB RAM是不相关的。每个
元素
可能有8个字节,带有填充和对齐。大小为25的
std::vector
将包含指针和大小(每个可能有4个字节),然后是实际元素的动态25*8字节。因此每个字节大约为208字节。现在,将其乘以1000万,您将获得1.93 gB所需的总空间(最小连续空间为76.3 mB)。如果在Windows上执行此操作,请忘记它。32位在libs与代码、数据和堆栈之间,您的总用户空间(包括程序和数据)只有2GB,您可能会吃得太多。也就是说,编译为64位。