Hola,
Si miras en el manual (
www.php.net/mysql_free_result), veras que dice que su parametro debe ser un "identificador de de recurso de resultado de MySQL" (o algo parecido). Ese identificador es lo que devuelve mysql_query().
Y lo que hace es "borrar" de la memoria los registros que ha leido de la base de datos. Por eso si despues intentas hacer un mysql_fetch_xxx() con ese identificador, te dara error.
Saludos.
PD: Si, las funciones te ahorran mucho trabajo. Es que en el fondo los programadores somos unos vagos