O código a seguir me dá uma falha de segmentação quando executado em uma máquina de 2 Gb, mas funciona em uma máquina de 4 GB.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
O tamanho do array é de apenas 4Mb. Existe um limite para o tamanho de uma matriz que pode ser usada em c ++?
c++
arrays
segmentation-fault
Mayank
fonte
fonte
Em C ou C ++, os objetos locais geralmente são alocados na pilha. Você está alocando uma grande matriz na pilha, mais do que a pilha pode suportar, então você está recebendo um stackoverflow.
Não o aloque localmente na pilha, use algum outro lugar ao invés. Isso pode ser obtido tornando o objeto global ou alocando-o no heap global . Variáveis globais estão bem, se você não usar o de nenhuma outra unidade de compilação. Para garantir que isso não aconteça por acidente, adicione um especificador de armazenamento estático, caso contrário, apenas use o heap.
Isso será alocado no segmento BSS, que faz parte do heap:
Isso será alocado no segmento DATA, que também faz parte do heap:
Isso será alocado em algum local não especificado no heap:
fonte
delete
qualquer lugar onde você alocarnew
. Mas se você tiver certeza de alocar memória apenas uma vez (como no principal), ela não é estritamente necessária - a memória é garantida para ser liberada na saída de principal, mesmo sem explícitadelete
.Além disso, se estiver executando na maioria dos sistemas UNIX e Linux, você pode aumentar temporariamente o tamanho da pilha com o seguinte comando:
Mas tenha cuidado, a memória é um recurso limitado e com grande poder vêm grandes responsabilidades :)
fonte
Seu array está sendo alocado na pilha, neste caso, tente alocar um array do mesmo tamanho usando alloc.
fonte
Porque você armazena a matriz na pilha. Você deve armazená-lo na pilha. Veja este link para entender o conceito de heap e pilha.
fonte