Это код C, который освобождает память отдельного списка. Он скомпилирован с Visual С++ 2008, и код работает так, как должно быть.
/* Program done, so free allocated memory */
current = head;
struct film * temp;
temp = current;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
Но я также столкнулся (даже в книгах) тот же код, который был написан следующим образом:
/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
Если я скомпилирую этот код с моим VС++ 2008, программа выйдет из строя, потому что я сначала освобождаю ток, а затем назначаю current- > next to current. Но, очевидно, если я скомпилирую этот код с помощью другого компилятора (например, для компилятора, который использовал этот автор), программа будет работать. Итак, вопрос в том, почему этот код компилируется с конкретным компилятором? Это потому, что этот компилятор помещает инструкции в двоичный файл, который запоминает адрес current- > next, хотя я освободил текущий и мой VС++ этого не делает. Я просто хочу понять, как работают компиляторы.