Ir ao conteúdo
  • Cadastre-se

Duvida simples sobre alocação dinamica


Maratal

Posts recomendados

Boa tarde, estou na parte de alocação dinamica mas nao estou conseguindo entender bem certo como funciona. Fiz um codigo bem simples abaixo pra ver se eu estava no caminho mas vi que nao entendi muita coisa mesmo!

 

A duvida é a seguinte, Por exemplo eu defino a variavel tamanho como 3. então estou alocando 4*3 bytes para o vetor num. Como é um vetor de inteiros daria um vetor num[3] correto? Ou nao?

 

Embaixo do malloc eu simplesmente dei um scanf e um printf no elemento num[40], só pra confirmar que daria erro, já que o vetor tem só 3 elementos, porém ele le e depois imprime certinho. porque? 

#include <stdio.h>
#include <stdlib.h>

int main(){
    int tamanho;
    int *num;
    scanf("%d", &tamanho);
    //"tamanho" é pra ser o tamanho do vetor

    num=malloc(sizeof(int)*(tamanho));

    scanf("%d", &num[40]);
    printf("%d\n", num[40]);

return 0;
}

Muito obrigado :D

Link para o comentário
Compartilhar em outros sites

@Maratal

antes de malloc tem de colocar (int *)

 

assim:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int tamanho;
    int *num;
    int i=0;
    scanf("%d", &tamanho);

    num=(int *)malloc(sizeof(int)*(tamanho));

    for(i=0;i<tamanho;i++){
        printf("%d ",num);
    }

return 0;
}

 

 

mas eu prefiro usar "calloc" porque coloca tudo a zero e não deixa lixo mas posições de memória que voce alocou 

assim:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int tamanho;
    int *num;
    int i=0;
    scanf("%d", &tamanho);

    num=(int *)calloc(tamanho, sizeof(int));

    for(i=0;i<tamanho;i++){
        printf("%d ",num);
    }

return 0;
}

 

 

 

obs: ainda não entendi como se coloca o código no formato que a moderação pretende, vou ver isso agora

desculpa ai pessoal 

 

Link para o comentário
Compartilhar em outros sites

Mas mesmo fazendo o cast continua a mesma coisa, acho que você n entendeu minha Duvida. Quero saber porque se Eu aloco memoria para que o vetor seja de tamanho 3 eu consigo ler e printar o num[40].

 

OBS: para por em formato de codigo basta clicar no icone de code na Caixa de reposta: <> e colar o 

 

codigo na janela q abrir

Link para o comentário
Compartilhar em outros sites

acho que entendi a duvida,

na realidade não existem vectores em C

os vectores em C são apenas apontadores mas que se escrevem com uma notação diferente para tornar a sintaxe mais fácil para o programador

experimenta escrever *(num+40) em vez de num[40] e veja o resultado

na realidade você não limitou o tamanho do seu vector, apenas disse ao computador que deveria alocar um x numero de posições de memória que seriam necessárias para o seu programa.

Mas nada impede você de imprimir essas posições na tela,

Mas você não deve escrever em posições que você não alocou pois nessa posição pode estar alocada memoria de outras variáveis e ao escrever lá, pode estar a alterar o valor dessas variáveis e danificar o seu programa  

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...