动态2维数组分配

时间:2015-06-12 14:04:39

标签: c++

我正在创建一个动态二维数组并分配它。我的for循环在10-15次运行后出错(每次都不是相同的值),分配错误。任何帮助将不胜感激。

__int32 aLarge = 8121432;
__int32 bLarge = 8121784;
ActualPosition** myPositions;

myPositions = new ActualPosition*[aLarge];

for (int x = 0; x < aLarge; x++)
{
    try
    {
        myPositions[x] = new ActualPosition[bLarge];
    }
    catch (bad_alloc& ba)
    {
        // Error here
    }
}

2 个答案:

答案 0 :(得分:5)

如果sizeof(ActualPosition) == 1那么您需要61,431 GB的内存来容纳您的阵列。因此,除非你有一台非常大的计算机,否则你将耗尽内存。

答案 1 :(得分:1)

当您使用C++标记问题时,无论@NathanOliver引发的内存大小问题如何,我建议使用库容器来存储二维数组。

例如:

std::vector<std::vector<ActualPosition>> myArray(aLarge);
for( auto v: myArray )
   v.resize(bLarge);

访问元素将非常简单:

myArray[i][j] = somevalue;

没有绑定检查,或者如果你想要更安全的东西,请使用at()

myArray.at(i).at(j) = somevalue;

如果在编译时知道大小(代码中似乎是这种情况),您也可以使用std::array