Test Foro de elhacker.net SMF 2.1

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


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;

    for(i=1;i<=2;i++){
        char * buffer = (char*)malloc(20);
        printf("%d\n", &buffer);
    }

    return 0;
}


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.

for(i=0;i<2;i++){
char * buffer = (char*)malloc(20);
printf("%d\n", buffer);
}


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
Cita de: 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.

for(i=0;i<2;i++){
char * buffer = (char*)malloc(20);
printf("%d\n", buffer);
}


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: