C++: problema de XCode EXC_BAD_ACCESS

Soy nuevo en la codificación de C ++ en Xcode como mi marco, por lo que me gustaría hacer una pregunta que creo que simplemente está relacionada con gestión de la memoria

Lo que estoy tratando de lograr es que intento crear un tamaño de matriz 10000 x 10000 sin embargo, incluso yo hago la codificación adecuada (al menos eso es lo que creo) simplemente no puedo hacer que funcione, solo señalo el EXC_BAD_ACCESO error.

Puedes encontrar mi código a continuación. ¿Es este un error orientado a XCode o he cometido un error de codificación obvio?

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

preguntado el 01 de mayo de 12 a las 22:05

int matrix[10000][10000]; me parece un desbordamiento de pila. -

1 Respuestas

Si Jesse Good publica su comentario "int matrix[10000][10000]; me parece un desbordamiento de pila. "Como respuesta, borraré esto.

Debe crear una asignación de este tamaño en el montón, en lugar de en la pila.

Aquí está el desglose:

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

Una forma común de superar este problema mediante la creación de asignaciones en el montón sería:

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

El tamaño de la pila está determinado por el sistema operativo, el hardware y otras cosas. Es posible que tenga menos de un MB para trabajar, pero por lo general no más de unos pocos. Por lo tanto, se deben evitar las asignaciones de pilas grandes.

contestado el 01 de mayo de 12 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.