• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Memória Dinâmica

Serr@no™

GF Ouro
Membro Inactivo
Entrou
Set 23, 2006
Mensagens
1,690
Gostos Recebidos
0
Quando falei dos arrays disse que só poderiam ser inicializados (em termos de tamanho) de uma forma constante, que não podesse ser alterada ao longo do programa. A isto chama-se reservar memória estáctica. Pode-se reservar memória em run time, basta para isso usarmos o operador new. O seguinte exemplo mostra como criar um inteiro dinamicamente.
#include <iostream>
using namespace std;
// demonstração do uso de memória dinamica
int main()
{
int *i = new int; // alojar
*i = 10; // afectar
cout<< *i << endl;
delete i; // desalojar


cin.get();
return 0;
}
Sempre que um programador aloja memória dinamicamente num programa fica com a responsabilidade de a libertar quando já não precisar mais dela. Para isso usa o operador delete.
O seguinte exemplo mostra como criar arrays dinamicamente:
#include <iostream>
using namespace std;
// programa troca a ordem de insersão de quantos números o utilizador quiser
int main()
{
int tam, i;


cout<<"Pretende introduzir quantos numeros?"<<endl;
cin >> tam;


// reservar espaço
int *a = new int[tam];


cout<<"Introduza os numeros..."<<endl;
// ler
for(i=0; i<tam; ++i)
cin>>a[ i ];


// escrever ao contrario
for(i=tam-1; i>=0; --i)
cout<<a[ i ]<<" ";


// libertar a memória alojada dinamicamente
delete [ ] a;


cin.get();
return 0;
}
Quando se faz int *a = new int[ n ]; o que o programa faz é criar um array de n posições e afectar o apontador a para a casa do primeiro índice. Como se trata de um array, teriamos de fazer delete a todos os seus índices, mas se utilizarmos delete [] a; isso é feito automaticamente.
 
Topo