'std::bad_alloc' 在根 (CERN) 的数组声明中,取决于数组大小

'std::bad_alloc' in array declaration in root(CERN), depending on array size

我有一段代码声明了一个编译不一致的 3D 浮点数组。

void ImageCombine()
{

  float *doseArrayTotal = new float[2350][2350][2350];
  float *doseArray1 = new float[1175][1175][1175];
  // I have commented out the rest of my code whilst debugging.
}

如果 doseArray1 的尺寸为 [2350][2350][2350] 或 [1024][1024][1024],它将编译。给定 [1175][1175][1175] 或 [1000][1000][1000] 以上的尺寸,它将产生错误。

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

我 运行 编写此代码的方式是通过 CERN 开发的一个名为 root(可怕的名字)的软件,我提供给 运行 此函数的输入是。

[co@fastpc11 mysim]$ root
root [0] .L ImageCombine.C
root [1] ImageCombine()

任何关于为什么我的代码不会 运行 以及我如何解决这个问题的建议将不胜感激。

干杯 克里斯

最初发布的代码不是有效的 C++;当 CERN Root 解释时,它恰好发生在 运行 上。动态声明 3D 数组:

float*** doseArrayTotal = new float**[2350];
for(int i = 0; i < 2350; ++i){
  doseArrayTotal[i] = new float*[2350];
  for(int j = 0; j < 2350; ++j){
    doseArrayTotal[i][j] = new float[2350];
  }
}

使用矢量做同样的事情:

vector<vector<vector<float> > > doseArrayTotal;
doseArrayTotal.resize(2350);
for (int i = 0; i < 2350; ++i) {
  doseArrayTotal[i].resize(2350);
  for (int j = 0; j < 2350; ++j){
    doseArrayTotal[i][j].resize(2350);
  }
}

这两个对象现在用作 3D 矩阵或图像,并且可以在位置 (1,2,3) 存储或访问浮点数,例如:

float ValueEntered = 7.3;
float ValueExtracted;
doseArrayTotal[1][2][3] = ValueEntered;
ValueExtracted = doseArrayTotal[1][2][3];