Академический Документы
Профессиональный Документы
Культура Документы
memória
PROF. MS ALESSANDRO DIAS
● A função malloc
● O sizeof não é uma função mas um operador, tal como return, por exemplo;
● Os parênteses na expressão sizeof (data) são necessários porque data é
um tipo-de-dados (os parênteses são análogos aos do casting);
● O operador sizeof também pode ser aplicado diretamente a uma variável:
se var é uma variável então sizeof var é o número de bytes ocupado por
var.
● Poderíamos ter escrito d = malloc (sizeof *d) no exemplo acima.
Alocação dinâmica de memória
Qual a diferença?
Alocação dinâmica de memória
● Matrizes bidimensionais são implementadas como vetores de vetores. Uma
matriz com m linhas e n colunas é um vetor de m elementos cada um dos
quais é um vetor de n elementos. O seguinte fragmento de código faz a
alocação dinâmica de uma tal matriz:
int **M;
M = malloc ( m * sizeof (int *));
for (int i = 0; i < m; ++i)
M[i] = malloc ( n * sizeof (int));
● Suponha, por exemplo, que alocamos um vetor de 1000 inteiros e depois decidimos que
precisamos de duas vezes mais espaço. Veja um caso concreto:
int *v;
v = malloc (1000 * sizeof (int));
for (int i = 0; i < 990; i++)
scanf ("%d", &v[i]);
v = realloc (v, 2000 * sizeof (int));
for (int i = 990; i < 2000; i++)
scanf ("%d", &v[i]);
Alocação dinâmica de memória
● Nesse exemplo, poderíamos usar a seguinte implementação ad hoc de
realloc:
6 -É verdade que não convém alocar blocos de poucos bytes, ou seja, invocar
malloc com argumento muito pequeno?
7-Posso alocar um vetor estaticamente com número não-constante de
elementos? Por exemplo, posso dizer
int v[ n];
se o valor de n só se torna conhecido durante a execução do programa?
8-É verdade que devemos atribiuir NULL a cada ponteiro que se tornou inútil
ou desnecessário?
9-Deveríamos usar a função calloc ao invés de malloc?