Beruflich Dokumente
Kultur Dokumente
Na alocao dinmica, o espao de memria para as variveis pode ser alocado dinamicamente durante a execuo do programa
Alocao Dinmica
Uso da memria:
uso de variveis globais (e estticas):
espao reservado para uma varivel global existe enquanto o programa estiver sendo executado
Alocao Dinmica
Uso da memria:
alocao dinmica:
espao de memria requisitada em tempo de execuo espao permanece reservado at que seja explicitamente liberado
depois de liberado, espao estar disponibilizado para outros usos e no pode mais ser acessado espao alocado e no liberado explicitamente, ser automaticamente liberado quando ao final da execuo
Alocao Dinmica
Alocao Dinmica
Alocao Dinmica
A memria alocada dinamicamente acessada atravs de Apontadores (pointers) que na verdade so variveis que armazenam o endereo de uma rea de memria A memria alocada dinamicamente faz parte de uma rea de memria chamada heap
Basicamente, o programa aloca e desaloca pores de memria do heap durante a execuo.
Alocao Dinmica
Alocao Dinmica
Funo sizeof:
retorna o nmero de bytes ocupado por um tipo
Funo malloc:
recebe como parmetro o nmero de bytes que se deseja alocar retorna um ponteiro genrico para o endereo inicial da rea de memria alocada, se houver espao livre:
ponteiro genrico representado por void* ponteiro convertido automaticamente para o tipo apropriado ponteiro pode ser convertido explicitamente
Alocao Dinmica
Exemplo: alocao dinmica de um vetor de inteiros com 10 elementos
malloc retorna o endereo da rea alocada para armazenar valores inteiros ponteiro de inteiro recebe endereo inicial do espao alocado
Alocao Dinmica
Exemplo (cont):
Alocao Dinmica
Exemplo (cont):
v armazena endereo inicial de uma rea contnua de memria suficiente para armazenar 10 valores inteiros v pode ser tratado como um vetor declarado estaticamente
v aponta para o inicio da rea alocada v[0] acessa o espao para o primeiro elemento v[1] acessa o segundo .... at v[9]
Alocao Dinmica
Exemplo (cont): tratamento de erro aps chamada a malloc
imprime mensagem de erro aborta o programa (com a funo exit)
Alocao Dinmica
funo free:
recebe como parmetro o ponteiro da memria a ser liberada
a funo free deve receber um endereo de memria que tenha sido alocado dinamicamente
Alocao Dinmica
Apontadores Notao em C
Definio de p como um apontador para uma varivel do tipo T
T *p;
Desalocao de memria
free(p);
Alocao Dinmica
Erros Comuns
Esquecer de alocar memria e tentar acessar o contedo da varivel Copiar o valor do apontador ao invs do valor da varivel apontada Tentar acessar o contedo da varivel depois de desaloc-la Esquecer de desalocar memria
Ela desalocada ao fim do programa ou procedimento funo onde a varivel est declarada, mas pode ser um problema em loops
Dvidas.... int *a no a declarao de um vetor de int? Em C, todo vetor um ponteiro Portanto pode-se fazer coisas como: