![Paulo Paulo](//static.vivaolinux.com.br/imagens/fotos/13c6d32ef8ebb.png)
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.