Pular para o conteúdo

Desalocação de memória

Responder tópico
  • Denunciar
  • Indicar

1. Desalocação de memória

Enviado em 27/08/2013 - 19:34h

Bom estou com um erro na desalocação da memória dinamicamente

#include <iostream>
using namespace std;
main(){
int *x=new int[4];
for(int i=0; i<4; i++)
*(x+i)=i+1;


for(int i=0; i<4; i++)
cout <<*(x+i)<<endl;


delete[] x;
cout <<endl;

for(int i=0; i<4; i++)
cout <<*(x+i)<<endl;
}
A saída do programa é

1
2
3
4

0
0
3
4
Bom o certo seria desalocar toda memória, mais ele desaloca só as 2 primeiras, alguem sabe por que ?

Responder tópico

2. Re: Desalocação de memória

Enviado em 27/08/2013 - 20:13h

Nesse seu último for é um '1' e não um 'i' como colocou.





Errado:

for(int i=0; i<4; i++)
cout <<*(x+i)<<endl;

Correto:

for(int i=0; i<4; i++)
cout <<*(x+1)<<endl;

3. Re: Desalocação de memória

Enviado em 27/08/2013 - 21:09h

É "i" mano, se eu colocar 1 ele vai pegar apenas posição de memória +1 e não vai percorrer as 4 posições e sim só a 2 posição (que em um vetor é o [1])

4. Re: Desalocação de memória

Enviado em 27/08/2013 - 22:17h

linuxmh escreveu:

É "i" mano, se eu colocar 1 ele vai pegar apenas posição de memória +1 e não vai percorrer as 4 posições e sim só a 2 posição (que em um vetor é o [1])
blz. Pesquisando vi que pode ocorrer problemas com o compilador. Então testei no devc++ e só liberou a primeira posição.

5. Re: Desalocação de memória

Enviado em 27/08/2013 - 23:15h

desalocar memória não significa zerá-la.
e tem outra coisa, o compilador pode muito bem usar um cache, já que o valor da variável não foi alterado.
é igual ao .bss: uma área que as variáveis não são inicializadas, portanto, o compilador/linker assume zeros.

tente gravar dados neste mesmos endereços que você liberou com try/catch.
é mais provável que gere exceções indicando o correto desalocamento de memória...

6. Re: Desalocação de memória

Enviado em 28/08/2013 - 12:17h

certo, bom eu sei que ele talvez não "zere" mais é muito estranho posso compilar 500x em pc's distintos, compiladores diferentes, e mesmo assim da o mesmo resultado, zera só as 2 primeira, então pelo menos ele devia jogar um lixo nessas memórias desalocadas.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder