我想知道你可以在阵列中存储多少个数字?
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)
该语言能够在一个数组中存储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)
| 归档时间: |
|
| 查看次数: |
14252 次 |
| 最近记录: |