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)

ヒープに割り当てを作成することでこの問題を克服する一般的な方法の1つは、次のとおりです。

#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は1MB未満の場合がありますが、通常は数MBを超えることはありません。したがって、大きなスタック割り当ては避ける必要があります。

于 2012-05-01T21:52:52.277 に答える