On 02/06/11 13:27, Henry Vermaak wrote:
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.
Yes, that was the answer I reached an hour after posting. It's
surprising how writing to a mailing list can concentrate the mind :)
BTW, the library works very well. It interfaces with libtesseract v.3.
It and bindings for many related leptonica image processing functions
are at
http://code.google.com/p/ocrivist/source/browse/
Malcolm
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal