code: def valgrind(command, env={}):
      
      xml_file = tempfile.NamedTemporaryFile()
      internal.register.after_check(lambda: _check_valgrind(xml_file))
  
      # Ideally we'd like for this whole command not to be logged.
      return run(f"valgrind --show-leak-kinds=all --xml=yes --xml-file={xml_file.name} -- {command}", env=env)
docs: Run a command with valgrind.
  
      :param command: command to be run
      :type command: str
      :param env: environment in which to run command
      :type env: str
      :raises check50.Failure: if, at the end of the check, valgrind reports any errors
  
      This function works exactly like :func:`check50.run`, with the additional effect that ``command`` is run through
      ``valgrind`` and ``valgrind``'s output is automatically reviewed at the end of the check for memory leaks and other
      bugs. If ``valgrind`` reports any issues, the check is failed and student-friendly messages are printed to the log.
  
      Example usage::
  
          check50.c.valgrind("./leaky").stdin("foo").stdout("bar").exit(0)
  
      .. note::
          It is recommended that the student's code is compiled with the `-ggdb`
          flag so that additional information, such as the file and line number at which
          the issue was detected can be included in the log as well.