微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C:XCode EXC_BAD_ACCESS问题

我不熟悉在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;
    }

解决方法:

如果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.因此,应避免大量堆栈分配.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐