2012-05-01 15 views
3

私はC++:XCodeのEXC_BAD_ACCESSの問題

は、私は何を達成しようとしていることであるだけでメモリ管理に関連していると信じて質問をお願いしたいと思いますので、私は私のフレームワークとしてXcodeでC++をコーディングに新しいです私は行列サイズを作成しようとしました10000 x 10000しかし、私は適切なコーディング(少なくとも私が信じているものです)を実行しても問題はありません。

私のコードは以下にあります。これはXコード指向のエラーですか、明らかなコーディングエラーがありましたか?

ジェシー良いポスト彼のコメントは、「int matrix[10000][10000];は私にスタックオーバーフローのように見えます。」場合の答えとして
#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; 
    } 
+3

'int matrix [10000] [10000];'はスタックオーバーフローのようです。 –

答えて

5

、私はこれを削除します。

このサイズの割り当ては、スタックではなくヒープ上に作成する必要があります。

ここ内訳です:、

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

スタックサイズは、オペレーティングシステムによって決定されているハードウェア、および:ヒープ上の割り当てを作成することによってこの問題を克服する

400,000,000 bytes = 10000*10000*sizeof(int) 

一般的な方法の1つは次のようになります他のもの。あなたは1 M​​B未満で動作するかもしれませんが、通常はそれ以上のものはありません。したがって、大きなスタック割り当ては避ける必要があります。

+0

偉大な答えをありがとう! – Ali

+0

@rolandbishopようこそ – justin