【发布时间】:2016-12-30 11:04:59
【问题描述】:
我有一段代码声明了一个编译不一致的 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()
任何关于为什么我的代码无法运行以及我如何解决这个问题的建议将不胜感激。
干杯 克里斯
【问题讨论】:
-
您试图分配过多的连续内存,您的机器没有足够的堆空间。这就是为什么当你减少数组维度时它起作用的原因。您需要考虑一种解决方法,例如更小的存储方案。
-
如果您已经将
float数组作为浮点指针处理,那么类型不应该是float***吗? -
代码是非法的 C++。尝试使用真正的 C++ 编译器对其进行编译。 IIRC ROOT 允许加载完整的垃圾,然后在运行时崩溃。
-
@ArnavBorborah 堆栈中的数组会使情况变得更糟,没有区别。
-
“它可以始终与较大的阵列一起运行,但始终不能与某些较小的阵列一起运行” 也许您应该向负责 ROOT 的人员投诉。 C++ 通常不会以这种方式工作。无论如何,您的程序都是合法的 C++,所以我不知道如何在 C++ 端修复它,当然除了使其合法 C++。
标签: c++ root-framework