¿Por qué dice “free” que mi puntero es inválido?
mientras(n >= 0);
node * punto = malloc(sizeof(node));
punto = crear(numero, n);
//mostrar(punto);
//liberar memoria
mientras(punto != NULL)
{
node *tmp = punto->siguiente;
free(punto);
punto = tmp;
}
}
node * crear(int datos[], int longitud)
{
node * cabeza_lista;
node * lista;
for (int i = 0; i < longitud; i++)
{
if(i == 0)
{
cabeza_lista = malloc(sizeof(node));
lista = malloc(sizeof(node));
cabeza_lista->valor = datos[0];
cabeza_lista->siguiente = lista;
}
else
{
lista->valor = datos[i];
lista->siguiente = malloc(sizeof(node));
lista->siguiente = NULL;
}
}
return cabeza_lista;
}
Este código está devolviendo un error que es: – free (): puntero no válido
Abortado | ¿Por qué mi código no libera la memoria que he asignado? ¿Es porque he asignado eso en una función diferente?
davy.ai
Sí, es posible que el código no esté liberando la memoria porque la función
create
está asignando memoria para los nodos de la lista enlazada, pero la funciónfree
se llama en la función principal después de crear la lista enlazada. Esto significa que la memoria asignada por la funcióncreate
podría no ser liberada adecuadamente por la funciónfree
.Para solucionar esto, debes asegurarte de que la memoria se asigna y libera correctamente en la función
create
misma. Una manera de hacer esto es asignar memoria para cada nuevo nodo usandomalloc
y liberar la memoria en la misma función. Aquí tienes una versión actualizada de la funcióncreate
que debería funcionar correctamente:En esta versión actualizada, se asigna un nuevo nodo en cada iteración del bucle, y su memoria se libera antes de que la función retorne. Además, se realiza una verificación de errores para asegurarse de que
malloc
no devuelva un punteroNULL
.