Ir para o conteúdo
Psycho_Mind

Função calloc e malloc

Mensagens Recomendadas

Psycho_Mind

Boas pessoal.

A função calloc em relação à malloc, a calloc permite alocar uma quantidade de blocos de memória, cada um

maior do que um byte ou estou errado ?

Se bem que ambas garantem que são alocados todos os bytes requeridos, mas podem ser alocados mais do que os

pedidos, correto ?

Obrigado.

Cumps.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
polska

Boas pessoal.

A função calloc em relação à malloc, a calloc permite alocar uma quantidade de blocos de memória, cada um

maior do que um byte ou estou errado ?

O calloc serve para alocar memória para um array com 'x' elementos, aloca um bloco de memória para o array e não vários blocos.. O tamanho dos bytes alocados para cada elemento depende do tipo do array, inteiro, char.. etc

Editado por polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycho_Mind

O calloc serve para alocar memória para um array com 'x' elementos, aloca um bloco de memória para o array e não vários blocos.. O tamanho dos bytes alocados para cada elemento depende do tipo do array, inteiro, char.. etc

Então assim sendo esse unico bloco pode ser maior do que um byte ? Por exemplo se pensar num long isso acontecerá, não é ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

A função calloc em relação à malloc, a calloc permite alocar uma quantidade de blocos de memória, cada um maior do que um byte ou estou errado ?

Ambas as funcoes, malloc() e calloc(), alocam um bloco de memoria. O tamanho especificado com a funcao malloc() é directamente em bytes; com a funcao calloc() implica uma multiplicacao interna da funcao.

Se bem que ambas garantem que são alocados todos os bytes requeridos, mas podem ser alocados mais do que os pedidos, correto ?

Nao te preocupes com isso (a nao ser que estejas a escrever a biblioteca padrao do C).

Mesmo que o tamanho alocado seja maior que o pedido nao deves aceder aos bytes extra.


A diferenca maior entre o malloc() e o calloc() é que o ultimo mete todos os bytes a zero.


Por exemplo, para alocar espaco para 1000 valores de tipo int, tanto podes usar malloc() como calloc().

int *espaco;
espaco = malloc(1000 * sizeof *espaco);
if (!espaco) {
   /* erro */
} else {
   /* usar espaco que tem lixo (nao esta inicializado) */
   free(espaco);
}

int *espaco;
espaco = calloc(1000, sizeof *espaco);
if (!espaco) {
   /* erro */
} else {
   /* usar espaco que tem todos os bytes a zero */
   free(espaco);
}

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycho_Mind

Ambas as funcoes, malloc() e calloc(), alocam um bloco de memoria. O tamanho especificado com a funcao malloc() é directamente em bytes; com a funcao calloc() implica uma multiplicacao interna da funcao.

Nao te preocupes com isso (a nao ser que estejas a escrever a biblioteca padrao do C).

Mesmo que o tamanho alocado seja maior que o pedido nao deves aceder aos bytes extra.


A diferenca maior entre o malloc() e o calloc() é que o ultimo mete todos os bytes a zero.


Por exemplo, para alocar espaco para 1000 valores de tipo int, tanto podes usar malloc() como calloc().

int *espaco;
espaco = malloc(1000 * sizeof *espaco);
if (!espaco) {
/* erro */
} else {
/* usar espaco que tem lixo (nao esta inicializado) */
free(espaco);
}

int *espaco;
espaco = calloc(1000, sizeof *espaco);
if (!espaco) {
/* erro */
} else {
/* usar espaco que tem todos os bytes a zero */
free(espaco);
}

Certissimo, obrigado pela explicação.

Abraço.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

A diferenca maior entre o malloc() e o calloc() é que o ultimo mete todos os bytes a zero.

A diferenca maior entre o malloc() e o calloc() é que o ultimo mete garantidamente todos os bytes a zero.

(assim fica mais claro e chama mais a atenção para a diferença. Numa chamada ao malloc() eles podem tb ser colocados a 0.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.