Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: naderST en 20 Mayo 2011, 00:34 am



Título: Crear la misma variable en diferentes posiciones de memoria
Publicado por: naderST en 20 Mayo 2011, 00:34 am
No se si es el titulo correcto pero mi duda es la siguiente tengo este código

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int i;
  7.  
  8.    for(i=1;i<=2;i++){
  9.        char * buffer = (char*)malloc(20);
  10.        printf("%d\n", &buffer);
  11.    }
  12.  
  13.    return 0;
  14. }
  15.  

Quiero hacer que cada vez que se recorra el for buffer se cree en una diferente posición en la memoria.



Título: Re: Crear la misma variable en diferentes posiciones de memoria
Publicado por: Littlehorse en 20 Mayo 2011, 01:07 am
Se reservan en diferentes posiciones, tu problema es que vos estas viendo la dirección del puntero y no la dirección a la que apunta. La dirección del puntero va a ser siempre la misma porque en el ejemplo que pusiste es una variable local que se encuentra en la pila.

Código
  1. for(i=0;i<2;i++){
  2. char * buffer = (char*)malloc(20);
  3. printf("%d\n", buffer);
  4. }
  5.  

Ten en cuenta que haciendo esto pierdes todas las referencias anteriores a la ultima por lo tanto pierdes la posibilidad de liberar esa memoria. En todo caso podrías usar un arreglo de punteros.

Saludos


Título: Re: Crear la misma variable en diferentes posiciones de memoria
Publicado por: naderST en 20 Mayo 2011, 01:37 am
Se reservan en diferentes posiciones, tu problema es que vos estas viendo la dirección del puntero y no la dirección a la que apunta. La dirección del puntero va a ser siempre la misma porque en el ejemplo que pusiste es una variable local que se encuentra en la pila.

Código
  1. for(i=0;i<2;i++){
  2. char * buffer = (char*)malloc(20);
  3. printf("%d\n", buffer);
  4. }
  5.  

Ten en cuenta que haciendo esto pierdes todas las referencias anteriores a la ultima por lo tanto pierdes la posibilidad de liberar esa memoria. En todo caso podrías usar un arreglo de punteros.

Saludos


Gracias ;-) la verdad no había pensando eso pero ahora comprendo que era lo que estaba haciendo. :silbar: