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