Ayuda con el uso de malloc

Iniciado por alexis33de, 19 Agosto 2010, 20:46 PM

0 Miembros y 1 Visitante están viendo este tema.

alexis33de

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

leogtz

#1
a)

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

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

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

alexis33de

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).
;-)