Desalocar memória dinâmica

1. Desalocar memória dinâmica

Augusto
LinuxMH

(usa BackTrack)

Enviado em 13/07/2013 - 00:43h

Bom estou tentando criar uma pilha sei como funciona e tudo mais estou com uma dúvida em desalocar a memória, exemplo
#include <iostream>
#include <stdlib.h>
using namespace std;
main(){
int *x;
x=new int(5);
cout <<*x<<endl;
x=new int(*x+5);
cout <<*x<<endl;
x=new int (*x-1);
cout <<*x<<endl;
delete(x);
cout <<*x<<endl;
}

bom minha dúvida é para eu desalocar uma memória eu tive que alocar denovo, eu queria saber se com a função delete eu posso desalocar apenas uma endereço e não ele todo


  


2. Re: Desalocar memória dinâmica

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/07/2013 - 07:19h

Ao contrário de malloc() e free() do C, que são funções, new e delete são operadores do C++. Desse modo -- e especialmente com delete --, você não precisa usar parênteses ao manipular um ponteiro simples como o x do seu programa.

Ao alocar memória, o valor devolvido pela operação não apenas serve para que você tenha acesso indireto ao dado apontado, mas serve também como chave de busca para a operação de desalocação. Se você não guardar esse valor (ou se o sobrescrever com outro, como fez no seu programa), vai comprometer a possibilidade de desalocação.

Você parece ter suposto no seu programa que a alocação consecutiva de dois inteiros dará como retorno endereços de dois inteiros adjacentes na memória. Tal suposição não é necessariamente verdadeira -- e eu até arriscaria o palpite de que provavelmente quase nunca será verdadeira.

Se você quiser alocar dinamicamente N valores distintos, terá de usar N ponteiros distintos. Se todos os valores forem do mesmo tipo, pode optar por ter apenas um ponteiro, fazendo a alocação de um array (por exemplo: int *i_array=new int[100];) e usando delete[] em lugar de delete no momento da liberação da memória. Mas melhor ainda, no caso de serem N valores do mesmo tipo, seria usar um dos containers da biblioteca padrão, como std::vector ou std::list.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts