Dirty memory is not memory leak.
Dirty memory has been released and can be re-allocate, but memory leak indicates the memory block has not released correctly so the memory can not be re-allocated.
from RedHad website:
Dirty means "might need writing to disk or swap." Takes more work to free. Examples might be files that have not been written to yet. They aren't written to memory too soon in order to keep the I/O down. For instance, if you're writing logs, it might be better to wait until you have a complete log ready before sending it to disk.
You can read more information about "Free," "buffer," "swap," "dirty." concepts from here.