Wireshark-dev: Re: [Wireshark-dev] Microsoft Visual C Version 6 support is a bitoutdated ...
From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Wed, 20 Dec 2006 02:36:14 -0800
Douglas Pratley wrote:
We went through upgrades from MSCV 6 -> 7.1 -> 8 in my last job. The
only real problem we ran into (apart from all the code tweaks in the C++
to make it compile 6 -> 7.1, which is not relevant here) was in passing
dynamically allocated memory across binary boundaries.

If everyone has followed the guidelines and used the "g_" functions for
allocation and deallocation, then all memory should be being allocated
from one CRT, so it may well just all "work". Would it be worth checking
the code to make sure that it doesn't use other allocation functions
anywhere?

If those are the documented guidelines, the documentation needs to be updated - the ep_ and se_ routines are what dissectors should use in almost all cases (so that they don't have to worry about freeing what they allocate).

On Windows, those allocators use VirtualAlloc() directly (to stuff guard pages into the memory space), so they bypass the C runtime. (On UN*X, they use mmap() to achieve the same goal if possible, and use g_malloc() otherwise - as far as I know, though, UN*X C environments typically don't have multiple incompatible memory allocators.)

However, I seem to remember the WinPcap developers saying that passing FILE *'s and even "file descriptors" (as returned by _open(), _fdopen(), etc.) across binary boundaries is problematic as well.