You can be sure that the common code is not leaking, but of course, if you have a decent size application, it is likely that SOME of your code is specific to Linux, other bits specific to Windows and some parts specific to OS X.
Those parts that are not specific to Linux will of course not be validated by Valgrind.
So, if you have a piece of code that does:
#if LINUX char buffer[512]; #else char buffer = new buffer[2048]; #endif ... use buffer ...
then you have a memory leak on windows but not linux.
Clearly, this is a trivial example, but such things can occasionally infiltrate code.
And, of course, there is a chance that using a system call in one OS is βsafeβ, so as not to close or otherwise βtell the OS that you are doneβ, and then a problem occurs in another OS.
In addition, as I mentioned earlier, Valgrind does not guarantee that you have no problem with memory usage - it detects things like:
void func() { char *p = new [1700]; ...
or
void func() { char *p = new [1700]; ...
but not:
void func() { vector<int> v; for(;;) v.push_back(1); }
because the memory is still βownedβ by something. Of course, this specific example is pretty extreme, but you can have similar things where the code stores something and just adds more and more items to the store and never removes them.