c++ - 是否可以在数组中存储 1000 万个数字?

标签 c++ arrays random

我想知道你可以在数组中存储多少个数字?

srand (time(NULL));
int array[10000000];
for(int i = 0; i < 10000000; i++){
    array[i] = (rand() % 10000000) + 1;
}

每次我想在数组中存储 10.000.000 个数字时,我的程序都会崩溃 (Eclipse)。我什至尝试了 Visual Studio,但它崩溃了。

所以我想知道我可以在数组中存储多少个数字,或者我的代码有问题吗?

最佳答案

您可以存储多少个数字,但您不能那样做。您的程序崩溃的原因是您正在使用分配在“堆栈”上的“自动”变量。堆栈的大小通常比“堆”更受限制,因此使用如此大的自动变量可能会导致...等待它...

堆栈溢出!

相反,试试这个:

int* array = new int[10000000];

然后在使用之后:

delete[] array;

第二步是学习智能指针;对于这种情况,您可以使用 boost::scoped_array 之类的东西,但是根据您喜欢的库(或者如果您有 C++11),有很多选项。

如果你有 C++11,你可以使用“RAII”来避免需要记住何时何地调用 delete。只需这样做即可分配数组:

std::unique_ptr<int[]> array(new int[10000000]);

或者只使用一个 vector ,它总是动态分配它的内容(“在堆上”,笼统地说):

std::vector<int> array(10000000); // 10000000 elements, all zero

关于c++ - 是否可以在数组中存储 1000 万个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578879/

相关文章:

c++ - 为什么在交叉编译时 CMAKE_FIND_ROOT_PATH 和 CMAKE_INCLUDE_PATH 不覆盖我的根文件系统?

python-3.x - 使用 Python 的 numpy 随机选择时如何指定随机种子?

arrays - 给定每列的选择索引,从 2D 数组构造 1D 数组

c - 指向字符串的指针

php rand() 函数显示负值

java - Java 中的非重复整数列表?任务

c++ - 一段C++代码得到 "invalid pointer"错误

c++ - 是否可以使用 C++ 在 Linux 上开发可加载内核模块(LKM)?

c++ - 创建节点并计算汽车的初始位置

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP