Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Memória dinâmica

Recommended Posts

Localhost

Olá. Surgiu-me aqui uma dúvida a fazer umas experiências...

Quando eu aloco dinamicamente por exemplo um int, esse int está acessivel por todas as funções correcto?

Então, a minha dúvida é a seguinte: eu para modificar o valor desse int preciso de passar para uma função o endereço do ponteiro que está a apontar para o int alocado dinamicamente ou posso passar por valor o ponteiro e depois posso alterar o valor e isso vai-se fazer sentir em todas as funções? Ou seja, se eu alocar dinamicamente uma variável e depois modificar a variável por um ponteiro que está noutra função essa modificação vai-se fazer sentir em todas as funções?

Tipo isto:

int main(void) {
  int *pHeap = (int *) malloc(sizeof(int));
  *pHeap = 10;
  printf("Valor: %i\n", *pHeap);
  ModificaValor(pHeap);
  printf("Valor agora: %i\n", *pHeap);
  return 0;
}

void ModificaValor(int *pValue) {
  *pValue = 20;
  printf("Valor na função: %i\n", *pValue);
}

Isto foi feito aqui, falta algumas coisas mas esta é a ideia geral. Aquela função ModificaValor vai modificar o valor também na função main ou vão ser uma modificação local apenas?


here since 2009

Share this post


Link to post
Share on other sites
pedrosorio

Olá. Surgiu-me aqui uma dúvida a fazer umas experiências...

Quando eu aloco dinamicamente por exemplo um int, esse int está acessivel por todas as funções correcto?

Então, a minha dúvida é a seguinte: eu para modificar o valor desse int preciso de passar para uma função o endereço do ponteiro que está a apontar para o int alocado dinamicamente ou posso passar por valor o ponteiro e depois posso alterar o valor e isso vai-se fazer sentir em todas as funções? Ou seja, se eu alocar dinamicamente uma variável e depois modificar a variável por um ponteiro que está noutra função essa modificação vai-se fazer sentir em todas as funções?

Tipo isto:

int main(void) {
  int *pHeap = (int *) malloc(sizeof(int));
  *pHeap = 10;
  printf("Valor: %i\n", *pHeap);
  ModificaValor(pHeap);
  printf("Valor agora: %i\n", *pHeap);
  return 0;
}

void ModificaValor(int *pValue) {
  *pValue = 20;
  printf("Valor na função: %i\n", *pValue);
}

Isto foi feito aqui, falta algumas coisas mas esta é a ideia geral. Aquela função ModificaValor vai modificar o valor também na função main ou vão ser uma modificação local apenas?

Aconselho-te a ler sobre apontadores para perceberes melhor como funciona a memória dinâmica.

Quando fazes:

int *pHeap = (int*)malloc(sizeof(int));

estás a alocar memória para um inteiro e na variável pHeap fica o endereço de memória onde esse inteiro ficará guardado. Quando passas a variável à função ModificaValor, estás a dar o endereço do teu inteiro, e ao fazer:

*pValue = 20;

estás a alterar o valor que se encontra nesse endereço. Quando acaba a função ModificaValor, a variável pValue é destruída, mas ela continha apenas o endereço da memória onde se encontra o inteiro. O inteiro continua lá.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Localhost

Ah sim, eu é que me esqueci que estava na verdade a passar o endereço. Não estava a prestar atenção. Desculpa lá.


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.