C ++ 0xC0000005:尝试制作大型矢量[180] [360]

时间:2016-05-17 03:01:13

标签: c++ visual-studio

我很难让我的计算机分配大量内存(在我的机器上的32GB内)。我在Visual Studio 2015中,在64位计算机上将目标作为x64运行,因此应该没有内存限制。

最初我试图制作scanf("%lu", &memebr.number); do { c = getchar(); }while(c != '\n' && c != EOF); puts("Please enter the street address"); gets(memebr.address); ,导致堆栈溢出。

根据Visual Studio调试器,内存使用量不会超过70MB,所以我很好奇内存问题是如何发生的。计算机上的内存使用量超过25GB。

有没有办法声明一个数组向量,如vector<int> my_vector[4][180][360]没有内存问题?到目前为止,我只能达到vector<int> my_vector[4][180][360]。我的大部分向量都只有很少的元素。非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

您是否在堆栈上分配内存?如果是这样,我相信在出现堆栈溢出错误之前有一个限制。对于Visual Studio 2015,我认为默认堆栈大小为1MB。

对于较大的阵列,您需要使用 new 关键字在上分配它们。

答案 1 :(得分:0)

如果您尝试分配多维数组,则会变得相当复杂。二维整数数组作为指针的数组动态分配,每个指针分配给新的整数数组。在一个天真的版本中,你需要一个循环来分配(并最终解除分配):

int **a= new int*[1000];
for (i = 0;  i< 1000; i++) {
   a[i] = new int[1000];
}

正如您所看到的,多个维度变得更加复杂,并且会占用额外的内存来存储指针。但是,如果您知道元素的总数,则可以只分配一个数组来存储所有元素(对于我的1000x1000示例为100000)并相应地计算每个元素的位置。

我会让剩下的让你弄明白......

答案 2 :(得分:0)

    static std::vector<int> my_vector[4][180][360];
    for (int i=0; i < 4; i++)
        for (int j=0; j < 180; j++)
            for (int k=0; k < 36; k++)
                my_vector[i][j][k].resize(90000);
     my_vector[1][2][3][4]=99;

通过创建虚拟到磁盘,这可以在我的机器上运行24gb。但它的可能性比较慢。您可能最好不要索引磁盘文件。

您还可以使用std :: map创建稀疏数组 &GT;

     static std::map<int,int> my_map[4][180][360];
     my_map[1][2][3][4]=99;