Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alexis33de en 19 Agosto 2010, 20:46 pm



Título: Ayuda con el uso de malloc
Publicado por: alexis33de en 19 Agosto 2010, 20:46 pm
Hola pues estaba viendo unas diapositivas sobre el uso de malloc alguien me podria decir xq estos 2 codigos de malloc son incorrectos?

a. { int x;
&x = (int *) malloc(sizeof(int));

}
/////////////////////////////////////
b. { int x[3];
x = (int *) malloc(3*sizeof(int));

}
SALUDOS


Título: Re: Ayuda con el uso de malloc
Publicado por: leogtz en 19 Agosto 2010, 21:09 pm
a)

Para asignar espacio a un puntero a int, la sintaxis debe ser:

Código
  1. signed int *p = malloc(sizeof(int) * 10);

Asignas un bloque de memoria de (sizeof(int) * 10) bytes.

El casting no es necesario.

Tu haces &x, con & lo que obtienes es la dirección en memoria.

b)

Tu necesitas trabajar con punteros al usar la función malloc

Al hacer

Código:
int x[N]
x = malloc(...)

x apunta al primer elemento del array.

malloc() devuelve un puntero que apunta al espacio asignado, es por eso que debes trabajar con punteros.


Título: Re: Ayuda con el uso de malloc
Publicado por: alexis33de en 21 Agosto 2010, 23:18 pm
Bien pues estuve investigando y esta es una forma mas clara de explicarlo , para lo q recien empiezan como yo. Aqui dejo una explicación para alguien q tenga el mismo problema en el futuro.
Es la forma en que asigna la memoria en ambos casos. En la primera a X se le asignó una localidad entera estática de memoria y aunque se llame a la dirección de X utilizando &X ya no se puede asignarle memoria de forma dinámica como lo hace en el caso a)

En el caso b) la asignación de memoria es estática también. Al declarar un arreglo por ejemplo X[3] se le está asignando 3 localidades de memoria estática de tipo entero al arreglo y aunque se trate de asignarle memoria de forma dinámica ya no se puede porque ya la tiene asignada (en ambos casos).
 ;-)