【发布时间】:2016-09-22 12:24:00
【问题描述】:
我有一个从大型数组中读取数据的程序,我最初在 Visual Studio 中将程序分为两个单独的项目,每个项目都可以正常工作,但是当我尝试将它们放在一起时,程序的行为很有趣,跳过了一些步骤,而调试。我对 C++ 很陌生,所以我开始做一些研究,我发现也许我正在用那些巨大的数组填充堆栈,我应该尝试将它们放在堆上。
我决定将每个数组更改为 std::vector 并以这种方式初始化它们:
std::vector<double> meanTimeAO = { 0.4437, 0.441, 0.44206, 0.44632, 0.4508, 0.45425,...}
但是在现在更改所有数组之后,当我尝试编译编译器并因堆栈溢出而崩溃时,我以为我通过将数组更改为向量来从堆栈中释放内存空间,但似乎我得到了相反的结果,这是为什么呢??
我应该如何处理这些大数组? (它们是固定的,永远不会改变值或大小)
【问题讨论】:
-
您是否尝试过只制作数组
static const float meanTimeAO[] = { 0.4437, 0.441, 0.44206, 0.44632, 0.4508, 0.45425, ... }?如果你那样做,那不应该把它们放在堆栈上。 -
将带有初始化器的数组放在函数之外
-
解决所有数组中固定大小的方法是使用称为链表的数据结构,其中每个元素存储一个引用下一个连续元素的对象。或者,您始终可以通过实例化一个新向量并复制所有元素,但这次使用更大的大小来重新定义您的向量。
-
@MosheRabaev:数组的固定大小不是 OP 的问题;这是一个不变量。在这里使用链表(甚至是
std::vector)是不必要的,而且会很迂回。 -
我喜欢有人在 Stack Overflow 上询问有关堆栈溢出的问题。
标签: c++ arrays c++11 vector stack