3

我是在 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;
    }
4

1 回答 1

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;
}

堆栈大小由操作系统、硬件和其他因素决定。您可以使用的内存可能少于 1 MB,但通常不会超过几个。因此,应该避免大的堆栈分配。

于 2012-05-01T21:52:52.277 回答