Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

[Resolvido] Diferença entre malloc e calloc

Recommended Posts

Bem, além do protótipo, encontrei uma característica como diferença entre estas duas funções: "calloc inicializa o espaço alocado com 0".

O que seria isso? Fiz uns testes aqui com as duas e retornam a mesma posição da memória alocada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As duas alocam memória.

 

Uma das diferenças voce já percebeu: calloc zera o conteúdo da memória alocada e malloc não.

A outra diferença é que calloc é usada para alocar memória para array.

Ele aloca um tamanho para cada elemento do array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Groove, pare um pouco e leia de novo: "calloc inicializa o espaço alocado com 0"

Inicializar o espaco alocado com zero não é a mesma coisa que retornar 0 como endereco de memoria...

Compartilhar este post


Link para o post
Compartilhar em outros sites

aff, agora que intendi, sempre que usar calloc, vou perder o valor dos elementos entao neh?

Pode dar um exemplo Kandrade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na teoria antes de usar a variável você aloca um espaço pra ela.

Por isso não terá problema com os elementos.

 

aff, agora que intendi, sempre que usar calloc, vou perder o valor dos elementos entao neh?

quer exemplo de calloc ou malloc?

 

Pode dar um exemplo Kandrade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, calloc vai guardar 20bytes (5 elementos do tipo int) da memória, desses 20bytes, todos os elementos vão ter valor zero?? malloc vai guardar 20bytes da memória, desses 20bytes, todos os elementos vão ter valores aletórios, aqueles que vem do lixo damemória??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos aos exemplos:

 

Quero alocar espaço para 5 inteiros. Com calloc eu faço:

 

p = (int *)calloc(5,sizeof(int));

 

Com malloc eu faço

 

p = (int *)malloc(5 * sizeof(int));

 

 

Nos dois casos o espaço reservado é o mesmo "em tamanho", não necessariamente alocam o mesmo endereço.

A diferença nesse caso seria o conteúdo que com calloc seria zerado.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe, os protótipos eu já sabia, mas tirou minha dúvida quanto ao calloc zerado :D

vlws Kandrade

agora te pergunto, qual a diferença entre zerar ou não os elementos?? no que faz diferença isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A outra diferença é que calloc é usada para alocar memória para array.

Ele aloca um tamanho para cada elemento do array.

como assim, um tamanho para cada elemento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode usar para descobrir se algum elemento não foi preenchido ou usar o conteúdo para fazer algum teste, mas de qualquer forma voce poderia zerar os elementos alocados do malloc também. A vantagem é que se um dia voce precisar zerar os elementos o calloc já faz pra voce e com malloc voce teria que fazer algumas linhas de código.

 

hehe, os protótipos eu já sabia, mas tirou minha dúvida quanto ao calloc zerado :D

vlws Kandrade

agora te pergunto, qual a diferença entre zerar ou não os elementos?? no que faz diferença isso?

 

Voltando ao exemplo:

p = (int *)calloc(5,sizeof(int));

É alocado um tamanho de inteiro 5 vezes, ou seja, terei 5 tamanhos de inteiros alocado.

 

 

omo assim, um tamanho para cada elemento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.