Ir ao conteúdo
  • Cadastre-se
hugodds97

C alocação de memoria - vetores de milhões de posições

Recommended Posts

Olá,Estou printando vetores >= a 1 milhão e <= 10 milhões, porém a partir de 2 milhões tenho problemas com a alocação de memoria.

#include<stdio.h>
#include<stdlib.h>
//PROTOTIPAGEM
void imprime_vetor(int v[], int *n);
void preencher_vetor(int v[], int *n);
int main (void)
{
    int *n;
    n = malloc(40000000*sizeof(int));
    *n = 10000000; //2000000;                                                                                                                                                                                                                                                                    ;
    int v[*n];
    preencher_vetor(v,n);
    imprime_vetor(v,n);
}
void preencher_vetor(int v[], int *n)
{
    int i;
    for(i = 0 ; i < *n ; i++) v[i] = i;
}
void imprime_vetor(int v[], int *n)
{
    int i;
    for(i = 0 ; i < *n ; i++) printf("[%d]",v[i]);
}   


Erro "segmentation fault (core dumped)

com_2m.jpeg

com_10m.jpeg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que estou enferrujado nas matemáticas porém um milhão não tem seis zeros?

adicionado 8 minutos depois

Bom... deixo a informação aqui do por que acho que esta falhando.  Seu vetor int v[*n]; esta reservado dentro do main, isso quer dizer que esta reservado na pilha, com a pouca experiência que tenho aprendi que dependendo do compilador você somente dispõe de 2 megabytes mais ou menos para reserva de variáveis na pilha. Se quiser mais quantidade de memória você precisa usar a free storage que praticamente dispõe toda a memória do computador. Lembre que 1 milhão de inteiros equivale a 4 milhões de bytes, pois um int são 4 bytes, se isso ultrapassar os 2 megas o programa vai dar falho de segmentação, o que quer dizer que você invadiu algum segmento vizinho causando o erro. Procure informação sobre o tamanho da pilha no seu compilador para não ultrapassar o máximo permitido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×