是否有可能在阵列中存储1000万个数字?

use*_*680 7 c++ arrays random

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

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

每次我想在数组中存储10.000.000个数字时我的程序崩溃了(Eclipse).我甚至试过Visual Studio并且它崩溃了.

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

Joh*_*nck 19

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

堆栈溢出!

相反,试试这个:

int* array = new int[10000000];
Run Code Online (Sandbox Code Playgroud)

然后使用它:

delete[] array;
Run Code Online (Sandbox Code Playgroud)

第二步是学习智能指针; 您可以使用类似boost::scoped_array的情况,但有很多选项取决于您喜欢的库(或者如果您有C++ 11).

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

std::unique_ptr<int[]> array(new int[10000000]);
Run Code Online (Sandbox Code Playgroud)

或者只使用一个向量,它总是动态地分配它的内容("在堆上",松散地说):

std::vector<int> array(10000000); // 10000000 elements, all zero
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 6

该语言能够在一个数组中存储10,000,000个值.这里的问题是你已经宣布堆栈中存在10,000,000个元素.堆栈的大小取决于实现,但大多数堆栈根本没有足够的空间来容纳那么多元素.对于这样的数组,堆是一个更好的位置

int* array = new int[10000000];
for(int i = 0; i < 10000000; i++){
    array[i] = (rand() % 10000000) + 1;
}
...
delete[] array;
Run Code Online (Sandbox Code Playgroud)