[fpc-pascal] How to free memory allocated by C++ library
Malcolm Poole
malcolm at lingua-z.co.uk
Wed Jun 1 22:27:32 CEST 2011
Working from the instructions in CinFreepascal.pdf (
ftp://ftp.freepascal.org/pub/fpc/docs-pdf/CinFreePascal.pdf ) I have
written an interface library to the C++ library libtesseract (
http://code.google.com/p/tesseract-ocr ).
Everything appears to work well but I am unsure about how to free memory
which has been reserved by a libtesseract function and returned as a
result. The original documentation states that "The calling function
must delete [] after use", but the application crashes with an Access
Violation if I try to free the memory with Dispose or Freemem. I can
confirm that the array of Integer pointed to by the result of
tesseract_AllWordConfidences contains valid data.
I would be grateful for any help.
- Malcolm
-------------
Freepascal declaration and code snippet:
function tesseract_AllWordConfidences( APIHandle: TTesseract ):
PInteger; stdcall; external LIBTESSINTF;
var
conf: PInteger;
FTesseract: TTesseract;
begin
...
conf := tesseract_AllWordConfidences(FTesseract);
...
end;
====
C function, and documentation from C++ baseapi.h
/**
* Returns all word confidences (between 0 and 100) in an array,
terminated
* by -1. The calling function must delete [] after use.
* The number of confidences should correspond to the number of space-
* delimited words in GetUTF8Text.
*/
extern int* EXPORTCALL tesseract_AllWordConfidences(tessHandle APIHandle){
return APIHandle->AllWordConfidences();
}
More information about the fpc-pascal
mailing list