我正在创建一个动态二维数组并分配它。我的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
}
}
答案 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
。