Desalocação de memória

1. Desalocação de memória

Augusto
linuxmh

(usa BackTrack)

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 ?


  


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

wellington
wellingtonsr

(usa Slackware)

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

Augusto
linuxmh

(usa BackTrack)

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

wellington
wellingtonsr

(usa Slackware)

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

Tadzio Buscácio
Tadzio

(usa Linux Mint)

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

Augusto
linuxmh

(usa BackTrack)

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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts