可能重复:
C 编程,为什么这个大数组声明会产生分段错误?
我写了一个简单的程序。
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int genotype[150000000];
}
但我得到一个奇怪的错误:
RUN FAILED(退出值1,总时间:131ms)
我怎样才能节省这笔钱int?
(我有足够的内存来保存这么多的ints而且我的电脑是64位的)
可能重复:
C 编程,为什么这个大数组声明会产生分段错误?
我写了一个简单的程序。
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int genotype[150000000];
}
但我得到一个奇怪的错误:
RUN FAILED(退出值1,总时间:131ms)
我怎样才能节省这笔钱int?
(我有足够的内存来保存这么多的ints而且我的电脑是64位的)
你的堆栈太小了。把它放在堆上,使用新的:
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();
作为链接器选项...
/STACK 601048576 // 150000000 * 4 (assume size of int), and 1Mb for general.
但是,嘿..不要这样做。我什至不确定会发生什么。
您在堆栈上分配它,这比堆或静态存储更受限制。
对于 C++,astd::vector将是更好的选择。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> genotype(150000000);
}
如果您想使用动态内存,只需声明一个指向您要在这种情况下分配的类型 int 的指针,然后调用 malloc() 函数,参数是您希望“数组”成为的字节数。在这种情况下,您需要获取单个整数的大小并将其乘以您想要的大小(即单元格的数量):
确保释放任何你 malloc 的东西,否则你会得到内存泄漏。