2012-05-01 5 views
3

내가C++ : 엑스 코드 EXC_BAD_ACCESS 문제

는 내가 달성하기 위해 노력하고있어 것은 단순히 메모리 관리와 관련된 것으로 판단 질문을하고 싶습니다 그래서 내 프레임 워크로 엑스 코드에서 C++를 코딩 새로운 오전 내가 행렬 크기를 만들려고 시도했는데 10000 x 10000 그러나 적절한 코딩 (적어도 그것이 내가 믿는 것)이라 할지라도 나는 단지 그것을 얻지 못한다. 단지 EXC_BAD_ACCESS 오류를 지적했다.

내 코드는 아래에서 찾을 수 있습니다. 이것은 Xcode 지향 오류입니까, 아니면 명백한 코딩 오류입니까?

제시 좋은 게시물 그의 코멘트는 "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) 

한 일반적인 방법 : 여기

은 고장의 다른 것들. 작업 할 수있는 메가 바이트는 1MB 미만일 수 있지만 일반적으로는 많지 않습니다. 따라서 큰 스택 할당은 피해야합니다.

+0

위대한 답변 주셔서 감사합니다! – Ali

+0

@rolandbishop 당신을 환영합니다. – justin