可能重复:
C programming, why does this large array declaration produce a segmentation fault?
我写了一个简单的程序。
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int genotype[150000000];
}
但是我得到一个奇怪的错误:
RUN FAILED(退出值1,总时间:131ms)
如何保存这一数量的int
?
(我有足够的内存来保存这个int
的数量,而我的计算机是64位的)
答案 0 :(得分:5)
你的筹码太小了。使用new:
将它放在堆上int* genotype = new int[150000000];
我希望以下内容有用。
或者您可以使用limit.h来了解您的程序所依赖的内容。 例如,您将找到int的最大范围:
C:
#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;
C ++
#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();
答案 1 :(得分:4)
作为链接器选项......
/STACK 601048576 // 150000000 * 4 (assume size of int), and 1Mb for general.
但是嘿.. 不要这样做。我甚至不确定会发生什么。
答案 2 :(得分:2)
您正在堆栈上分配它,这比堆或静态存储更有限。
对于C ++,std::vector
是更好的选择。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> genotype(150000000);
}
答案 3 :(得分:1)
如果你想使用动态内存,只需在这种情况下声明一个指向你想要分配的类型的指针int,并调用malloc()函数,其参数是你想要“数组”的字节数。在这种情况下,您需要获取单个整数的大小,并将其乘以您想要的大小(即单元格数):
确保释放任何内容,否则会导致内存泄漏。