El siguiente código me da un error de segmentación cuando se ejecuta en una máquina de 2 Gb, pero funciona en una máquina de 4 GB.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
El tamaño de la matriz es de solo 4 Mb. ¿Existe un límite en el tamaño de una matriz que se puede usar en c ++?
c++
arrays
segmentation-fault
Mayank
fuente
fuente
En C o C ++, los objetos locales generalmente se asignan en la pila. Está asignando una matriz grande en la pila, más de lo que la pila puede manejar, por lo que obtiene un stackoverflow.
No lo asigne localmente en la pila, use otro lugar en su lugar. Esto se puede lograr haciendo que el objeto sea global o asignándolo en el montón global . Las variables globales están bien, si no usa las de ninguna otra unidad de compilación. Para asegurarse de que esto no suceda por accidente, agregue un especificador de almacenamiento estático; de lo contrario, simplemente use el montón.
Esto asignará en el segmento BSS, que es parte del montón:
Esto asignará en el segmento de DATOS, que también es parte del montón:
Esto se asignará en alguna ubicación no especificada en el montón:
fuente
delete
todos los lugares con los que asignenew
. Pero si está seguro de que asigna memoria solo una vez (como en main), estrictamente no es necesario: se garantiza que la memoria se liberará a la salida de main incluso sin explícitadelete
.Además, si está ejecutando en la mayoría de los sistemas UNIX y Linux, puede aumentar temporalmente el tamaño de la pila con el siguiente comando:
Pero cuidado, la memoria es un recurso limitado y con un gran poder vienen grandes responsabilidades :)
fuente
Su matriz se está asignando en la pila; en este caso, intente asignar una matriz del mismo tamaño utilizando alloc.
fuente
Porque almacena la matriz en la pila. Deberías guardarlo en el montón. Consulte este enlace para comprender el concepto de montón y pila.
fuente