Este es el código C que libera la memoria de una lista vinculada individualmente. Está compilado con Visual C++ 2008 y el código funciona como debería ser.Pregunta sobre los compiladores y cómo funcionan
/* Program done, so free allocated memory */
current = head;
struct film * temp;
temp = current;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
Pero también me encontré (incluso en un par de libros) mismo código escribe así:
/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
Si puedo compilar el código con mis VC++ 2008, el programa se bloquea porque estoy primero liberando actual y luego asignando current-> next to current. Pero, obviamente, si compilo este código con algún otro compilador (por ejemplo, compilador que el autor del libro usó) el programa funcionará. Entonces la pregunta es, ¿por qué se compila este código con el trabajo de compilación específico? ¿Es porque ese compilador puso instrucciones en un archivo binario que recuerda la dirección de current-> next aunque liberé actual y mi VC++ no lo hace? Solo quiero entender cómo funcionan los compiladores.
¿Qué libros serían esos? –
@Neil, malos. –
Cuéntanos el libro para evitarlo y recomendarlo. –