28-10-2004 ALOCAÇÃO DINÂMICA A memória do computador pode ser dividida nas seguintes partes: |========| | Pilha | |========| | HEAP | |(àrea p/| |alocoção| |Dinâmica| | | |========| |Variá- | |vies | |Globais | |========| |Programa| |========| Operador new Aloca espaço na memória (heap) suficiênte para armazenar o tipo que o segue e retorna o endereço do byte inicial int *a; a=new int; Operador delete Desaloca o espaço de memóriaapontado pelo ponteiro que o segue. Sempre que não precisamos mais do espaço alocado no heap, devemos desalocá-lo, a fim de liberar memória e evitar erros delete a; Alocação dimâmica de vetor Você pode alocar um vetor dinâmicamente. Neste caso, o vetor é armazenado no heap. int *v; v=new int[30]; //Pode ser uma variável ou constante //Um espaço contíguo na memória, para armazenar 30 inteiros //é alocado e o endereço do byte inicial é armazenado no ponteiro Verificar se a alocação de memória teve sucesso int *a; a=new int; if(a==NULL) // OU (!a) cout << "tente liberar memória"; delete[] v; Para acessar os dados do vetor você pode usar a notação de indexação de células ou ponteiro Exercício: Faça um programa que pergunte a quantidade de números reais a inserir, aloque um vetor dinamicamente de n posições, leia todos e informe quantos são maiores que a média Alocação dinamica de matriz Para alocar uma mtriz dinamicamente, precisamos de um ponteiro para ponteiro, pois a matriz será um vetor de vetores int **m; //Ponteiro para um vetor de ponteiros m=new int*[3]; //Aloca um vetor de ponteiro de 3 posições //Para cada célula do vetor de ponteiros, alocamos um vetor //de inteiros de tamanho 4 for(i=0; i<3;i++) m[i]=new int[4]; //testar se a alocação teve exito No caso de alocação dinamica de matriz, as celulas das linha são alocadas contiguamante, mas as linha podem estar em qualquer local do heap //Para deletar a matriz for(i=0;i<3;i++) delete[] m[i]; delete[] m; Ex: Escreva um programa que leia uma matriz de um arquivo e imprima na tela a sua transposta 5 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15