On 02/06/11 13:04, Jonas Maebe wrote:

On 02 Jun 2011, at 10:35, Henry Vermaak wrote:

If you add cmem to the start of your uses list, all the memory operations are 
routed through the c memory manager.  You should then be able to use Free 
safely for pointers that were allocated by your library.

That is incorrect. The cmem unit adds extra size information to all allocated memory blocks (for so 
that memsize() works). Additionally, most C++ memory allocations happen via new/delete, and using 
libc's "free" to free a memory block allocated by "new" is almost guaranteed to 
cause crashes down the line.

So it works in C, but not C++? Or have I completely misunderstood the documentation?

You'd have to write a separate cppmem unit that exports the various kinds of 
new/delete helpers. To make things extra fun, their mangled names depend on the 
used C++ compiler and sometimes even version (and also which helpers exist can 
change, e.g., I believe older g++ versions had a single helper for delete and 
delete[], which the current versions have two different ones for that).

Or write a function for the library that takes care of disposing pointers.

Henry
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to