2012-05-01 2 views
3

Я новичок в кодировании C++ в Xcode, как мой рамки, поэтому я хотел бы задать вопрос, который я считаю, это просто связано с управлением памятиC++: XCode EXC_BAD_ACCESS вопрос

То, что я пытаюсь достичь что я пытаюсь создать размер матрицы 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; 
    } 
+3

'int matrix [10000] [10000];' выглядит как переполнение стека ко мне. –

ответ

5

Если Jesse Хорошие посты его комментарий «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; 
} 

размера стеки определяются операционной системой, аппаратные средства, и другие вещи. У вас может быть менее одного МБ для работы, но обычно не более нескольких. Поэтому следует избегать больших распределений стека.

+0

Спасибо за отличный ответ! – Ali

+0

@rolandbishop Добро пожаловать – justin

Смежные вопросы