Jump to content
Psycho_Mind

Função calloc e malloc

Recommended Posts

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.

Share this post


Link to post
Share on other 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

Edited by polska

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

Share this post


Link to post
Share on other 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 é ?

Share this post


Link to post
Share on other 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);
}

Edited by 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.