Alocação de Memória com new e delete

Share Embed


Descrição do Produto

ARRAYS • C++ tem tipos de dados simples como short, int, float, char, double, etc. • As instruções int a; float b[10]; double c[5][5];

definem um inteiro simples a, um array unidimensional de floats b: b[0] ... b[9] e um array bidimensional de doubles c: c[0][0] ... c[4][4] (Importante: todos os índices de arrays começam em 0). • a,b e c são alocadas estaticamente e serão apagadas da memória assim que terminar a função onde são declaradas. O espaço ocupado é fixado na compilação do programa.

ARRAYS • Alocação dinâmica de memória permite a criação de arrays cuja dimensão é determinada durante a execução (ex.: ler uma imagem cujo tamanho é variável); • Importante para fazer uma gestão eficiente da memória. • Problema: a alocação dinâmica é a principal fonte de erros nos programas em C++. Os principais motivos são: 1. Acessar/Apagar arrays antes de os criar ou inicializar. 2. Acessar/Apagar arrays depois de já terem sido apagados. 3. Não apagar a memória reservada (alocada). Origina crash ao fim de algum tempo de funcionamento.

APONTADORES • A alocação dinâmica de memória reserva uma quantidade de memória para uma variável, estrutura ou objeto. • O processo de alocação retorna um endereço físico de memória para o tipo de variável/ estrutura que se pretende guardar. O endereço é guardado num APONTADOR. • O tipo de apontador indica o tipo de dados que são guardados. • float* representa um apontador para um bloco de memória de um array de floats (os arrays podem ter tamanho 1 ou mais)

Alocação/Liberação de Memória • A alocação de memória é efetuada pelo comando new. Exemplo: int* a=new int;

a não é um inteiro. É um apontador que contém o endereço onde está guardado um valor do tipo int. Para acessar o valor guardado na posição de memória apontada por a usa-se o operador *, por exemplo: *a = 1; Quando o valor inteiro já não é necessário,pode ser libertada a memória reservada através do comando delete. Exemplo: delete a;

Alocação/Liberação de Arrays • A alocação é efetuada pelo comando new: int* a=new int[10]; // array de 10 inteiros

• a é um apontador que contém o endereço do primeiro elemento do array. Para acessar os vários elementos: a[0] = 1 ; a[3]=2; etc. • Quando o array já não é necessário, pode ser liberada a memória reservada com o comando delete []: delete [] a; • Atenção à diferença entre delete e delete [].

Arrays Bidimensionais (2D) • Os arrays bidimensionais são criados como um array de arrays: e.g. uma matriz 5x10 pode ser guardada como: // aloca 5 linhas de floats float** matrix=new float*[5]; for { int i=0;i
Lihat lebih banyak...

Comentários

Copyright © 2017 DADOSPDF Inc.