'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];
我有一段代码声明了一个编译不一致的 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];