To jest kod C, który zwalnia pamięć pojedynczo połączonej listy. Jest skompilowany z Visual C++ 2008 i kod działa tak, jak powinien.Pytanie o kompilatory i jak działają
/* Program done, so free allocated memory */
current = head;
struct film * temp;
temp = current;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
Ale ja też spotkałem (nawet w książkach) sam kod napisany tak:
/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
Jeśli mogę skompilować ten kod z moich VC++ 2008, awarie programu, bo jestem pierwszy uwalniając prąd, a następnie przypisywanie prądu-> obok aktualnego. Ale oczywiście jeśli skompiluję ten kod z innym kompilatorem (na przykład kompilatorem, którego używał autor książki) program zadziała. Pytanie brzmi, dlaczego ten kod został skompilowany z konkretną pracą kompilatora? Czy to dlatego, że ten kompilator umieszczał instrukcje w pliku binarnym, które pamiętają adres bieżącego-> następnego, chociaż uwolniłem prąd i mój VC++ tego nie robi. Chcę tylko zrozumieć, jak działają kompilatory.
które książki to będzie? –
@Neil, złe. –
Prosimy o przekazanie nam książki, abyśmy mogli jej uniknąć i zalecić jej odrzucenie. –