我不熟悉在Xcode中编写C ++作为我的框架,所以我想问一个我认为只与内存管理有关的问题
我想要实现的是我尝试创建一个矩阵大小 10000 x 10000 然而即使我做了正确的编码(至少我认为是这样)我只是无法得到它工作,只是指出 EXC_BAD_ACCESS 错误。
您可以在下面找到我的代码。这是一个面向XCode的错误还是我做了明显的编码错误?
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
// insert code here...
int matrix[10000][10000];
for(int i=0;i<10000;i++)
for(int j=0;j<10000;j++)
matrix[i][j]=24;
cout<<"Done"<<endl;
return 0;
}
答案 0 :(得分:5)
如果Jesse Good发表评论“int matrix[10000][10000];
看起来像堆栈溢出给我。”作为答案,我会删除它。
您应该在堆上创建此大小的分配,而不是在堆栈上。
以下是细分:
400,000,000 bytes = 10000*10000*sizeof(int)
通过在堆上创建分配来克服此问题的一种常见方法是:
#include <iostream>
#include <vector>
int main(int argc, const char* argv[]) {
std::vector<std::vector<int> > matrix(10000, std::vector<int>(10000, 24));
cout<<"Done"<<endl;
return 0;
}
堆栈大小由操作系统,硬件和其他东西决定。您可能只有不到一MB的工作时间,但通常不会超过几个MB。因此,应避免大量堆栈分配。