Showtime
2003-11-03 20:15:47 UTC
Hola. Según he leído en varios sitios, la memoria asignada por "malloc" no
es local a la función en la que se encuentra, sino que permanece fuera de
ella. Sin embargo, esto no funciona:
//-----------------------
void funcion (int *p) {
p=malloc(sizeof(int)*3);
*p=1;
*(p+1)=2;
*(p+2)=3;
}
void main () {
int *p;
funcion(p);
printf("%i %i %i\n",*p,*(p+1),*(p+2)); //valores erróneos
free(p);
}
//-----------------------
Pero esto sí:
//-----------------------
void funcion (int *p) {
*p=1;
}
void main () {
int p;
funcion(&p);
printf("%i\n",p); //valor correcto
}
//-----------------------
¿A qué se debe esto?
Gracias de antemano.
es local a la función en la que se encuentra, sino que permanece fuera de
ella. Sin embargo, esto no funciona:
//-----------------------
void funcion (int *p) {
p=malloc(sizeof(int)*3);
*p=1;
*(p+1)=2;
*(p+2)=3;
}
void main () {
int *p;
funcion(p);
printf("%i %i %i\n",*p,*(p+1),*(p+2)); //valores erróneos
free(p);
}
//-----------------------
Pero esto sí:
//-----------------------
void funcion (int *p) {
*p=1;
}
void main () {
int p;
funcion(&p);
printf("%i\n",p); //valor correcto
}
//-----------------------
¿A qué se debe esto?
Gracias de antemano.