CASO 01:
char *ptr;
ptr = malloc (1);
scanf ("%c", ptr);
free(ptr);
CASO 02:
typedef struct {
int dia, mes, ano;
} data;
data *d;
d = malloc (sizeof (data));
d->dia = 27;
d->mes = 04;
d->ano = 2011;
free(d);
I. CASO 01 dá erro porque o número 1 não aloca memória e CASO 02 está correto porque sizeof aloca a memória de acordo com o tipo.
II. CASO 01 o número 1 representa a quantidade de bytes alocados e CASO 02 o operador sizeof ocupa vários bytes, ou seja, ele diz quantos bytes o tipo especificado tem.
III. CASO 01 o número de bytes é especificado no argumento da função e CASO 02 sizeof funciona como uma função, assim sendo, chamando a struct data.
IV. Enquanto a função malloc aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço desse bloco, a função free libera o conteúdo de malloc.
V. Enquanto a função malloc aloca um bloco consecutivo de memória do computador e devolve o endereço desse bloco, a função free libera a porção de memória alocada por malloc.
a) I, III e IV estão corretas;
b) III e V estão corretas;
c) II e V estão corretas;
d) I, II e V estão corretas;
e) NDA.
Fonte: http://www.ime.usp.br/~pf/algoritmos/aulas/aloca.html
Um comentário:
letra C, pq CASO 01 não da erro, somente aloca 1 byte de memoria e free libera a porção de memória alocada por malloc.
Postar um comentário