Hola gente!, estaba leyendo un codigo en internet y me surgieron algunas dudas:
Es una funcion para insertar un elemento a una lista vacia, en la condicion 'if' primero le asigna espacio en la memoria a 'nuevo_elemento' y despues compara ese resultado con NULL, que significa eso? Generalmente asigno NULL a los punteros que todavia no apuntan a un elemento, ademas que en esa funcion le asigno memoria a 'nuevo_elemento' y despues a 'nuevo_elemento->dato', no seria suficiente con asignar memoria solo a 'nuevo_elemento->dato'?
Mi otra duda es que pude notar que asigno memoria a una estructura entera, 'Lista', no a una variable de tipo 'Elemento' como hizo en la funcion de insercion, por que no hacer lo mismo con todas las estructuras? No como hizo en la funcion 'ins_en_lista_vacia' que asigno en dos situaciones. Espero no haber hecho muchas preguntas, realmente me tiene confundida este tema de asignar memoria y no encuentro un medio para poder entenderlo mejor. Desde ya muchas gracias.
Código (c) [Seleccionar]
typedef struct ElementoLista
{
char *dato;
struct ElementoLista *siguiente;
} Elemento;
typedef struct ListaIdentificar
{
Elemento *inicio;
Elemento *fin;
int tamanio;
} Lista;
Código (c) [Seleccionar]
int ins_en_lista_vacia (Lista * lista, char *dato) {
Elemento *nuevo_elemento;
if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
{
return -1;
}
if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char))) == NULL)
{
return -1;
}
strcpy (nuevo_elemento->dato, dato);
nuevo_elemento->siguiente = NULL;
lista ->inicio = nuevo_elemento;
lista ->fin = nuevo_elemento;
lista ->tamanio++;
return 0;
}
Es una funcion para insertar un elemento a una lista vacia, en la condicion 'if' primero le asigna espacio en la memoria a 'nuevo_elemento' y despues compara ese resultado con NULL, que significa eso? Generalmente asigno NULL a los punteros que todavia no apuntan a un elemento, ademas que en esa funcion le asigno memoria a 'nuevo_elemento' y despues a 'nuevo_elemento->dato', no seria suficiente con asignar memoria solo a 'nuevo_elemento->dato'?
Código (c) [Seleccionar]
int main (void){
char eleccion;
char *nom;
Lista *lista;
Elemento *actual;
if ((lista = (Lista *) malloc (sizeof (Lista))) == NULL) return -1;
if ((nom = (char *) malloc (50)) == NULL) return -1;
Mi otra duda es que pude notar que asigno memoria a una estructura entera, 'Lista', no a una variable de tipo 'Elemento' como hizo en la funcion de insercion, por que no hacer lo mismo con todas las estructuras? No como hizo en la funcion 'ins_en_lista_vacia' que asigno en dos situaciones. Espero no haber hecho muchas preguntas, realmente me tiene confundida este tema de asignar memoria y no encuentro un medio para poder entenderlo mejor. Desde ya muchas gracias.