Você está na página 1de 3

Alocao dinmica de memria em C++

C++ substitui as funes C de alocao e de desalocao de memria , malloc e free, pelas novas
funes new e delete, respectivamente e torna esse processo muito mais fcil para o programador. O
cdigo seguinte exemplifica o modo mais simples de uso de new e delete. Um pointer para um
inteiro aponta para um bloco de memria criado por new:
int *p;
p = new int;
*p = 12;
cout << *p;
delete p;

ainda possvel alocar blocos compostos de matrizes de tamanhos variados, usando uma tcnica
similar. Repare o uso de [] para excluir a matriz:
int *p;
p = new int[100];
p[10] = 12;
cout << p[10];
delete [] p;

O valor 100 poderia ser uma varivel, se desejvel.

ALOCACAO DE VETORES E ARRAYS


Operador new:
int * array = new int[100];
char * string = new char[11];
float * a = new float; ou new(float);
float *pi = new float(3.1415);

O new lana uma exceo caso no obtenha sucesso na alocao.


Operador delete: desalocar a memria alocada pelo new:
delete
delete
delete
delete

a;
pi;
[] array;
[ ] string;

OBS: Sempre desalocar o espao de memria alocado para uma varivel, quando ela no for
mais utilizada usando new <-> delete.
EXEMPLO ERRADO:
int n;
cout << "n = ";
cin >> n;
int v[n]; // Isto nao esta correto,

embora alguns compiladores aceitem

Exemplo testado1:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
int *ve, i, n=10;
// Solicita ao usuario a quantidade de elementos do vetor
cout << "Quantidade de elementos: ";
cin >> n;
// Aloca memoria para o vetor (n * 2 bytes)
ve = new int[n];
if (ve == NULL) {
cout << "Falta memoria para a alocagao do vetor" << endl;
exit(1);
}
// Insere os valorcs acs clcmentos do vetor
for (i=0; i<n; i++) {
cout << "Elemento " << i << " = ";
cin >> ve[i];

}
// Exibe elementos do vetor
for (i=0; i<n; i++)
cout << "Elemento " << i << " = "<< ve[i] << endl;
// Libera a memoria alocada
delete []ve;
ve = NULL;
system("PAUSE");
return EXIT_SUCCESS;
}

Exemplo testado2:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
float **matriz;
int nrow=10, ncol=10, i;
/* Aloca a matriz */
/* Aloca vetor de ponteiros */
matriz = new float* [nrow];
if(!matriz){
cout << " Memria insuficiente!" << endl;
exit(0);
} else{
/* Aloca as linhas */
for(i=0 ; i <nrow; i++){
matriz[i]= new float[ncol];
if(!matriz[i]){
cout << " Memria insuficiente!" << endl;
exit(0);
}
}
}
//SEU CODIGO
//SEU CODIGO
matriz[2][3]= 4.6;
matriz[3][3]= 1.4;
cout << matriz[2][3] + matriz[3][3] << endl;
/* Desaloca as linhas */
for (i=0; i < nrow ; i++) delete [] matriz[i];
/* Desaloca o vetor de ponteiros */
delete [] matriz;
system("PAUSE");
return EXIT_SUCCESS;
}

Exemplo Testado 3:
#include <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;
void teste (double ** &matriz);
int main(){
int n= 20;
double **matriz;
matriz = new double* [n];
for (int i=0; i<n; i++)
matriz[i] = new double [n];
//SEU CODIGO
teste(matriz);
cout << matriz[2][2] <<
for (int i=0; i<n; i++)
delete matriz[i];
delete matriz;
system("PAUSE");
return EXIT_SUCCESS;
}

endl;

void teste (double ** &matriz){


matriz[2][2] =1.23;
}

Programa testado 4:
#include <iostream>
#include <string>
using namespace std;
int main(){
string nome;
string sobrenome;
cout<<"Digite seu nome: ";
getline(cin, nome);
cout<<"Digite seu sobrenome: ";
getline(cin, sobrenome);
cout <<"Seu nome "<<nome<<" e seu sobrenome "<<sobrenome<<"."<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Exemplo testado5:
#include
#include
#include
#include

<cstdlib>
<iostream>
<fstream>
<string>

using namespace std;


int main(){
string frase;
cout<<"Escreva uma frase para ser escrita no arquivo string.txt:";
getline(cin, frase);
cout<<"Obrigado. Escrevendo dados no arquivo strings.txt...\n";
ofstream escreve; // Primeiro contato com classes
escreve.open("strings.txt");
escreve << "Utilizamos os objetos ofstream para escrever em arquivos\n";
escreve<< "Note que podemos utilizar os caracteres \\n pra quebrar a linha, como fazamos e cout\n";
int numero = 100;
escreve<<"Podemos escrever o valor de variaveis numericas: " <<numero <<"\n";
int matriz[3] = {42, 19, 99};
escreve<<"Podemos tambm escrever matrizes!";
for (int i=0; i < 3; i++){
escreve.width(6);
escreve<<matriz[i]<<" ";
}
escreve<<"\n";
escreve<<"Finalmente, podemos receber dados via cin e escrever estes dados no arquivo!\n";
escreve<<"A frase que voc digitou durante a execuo do programa: "<<frase<<"\n";
escreve.close();
cout<<"Dados escritos no arquivo. Fim do Programa!";
char letra;
ifstream leitura; // Primeiro contato com classes
leitura.open("strings.txt");
if(!leitura.is_open( )){
cout<<"No foi possvel abrir arquivo! Programa ser terminado!\n";
leitura.clear( ); //reseta o objeto leitura, para limpar memria do sistema}
}
while (leitura.get(letra))
cout << letra;
leitura.close();
system("PAUSE");
return 0;
}