[pcre-dev] [Bug 1209] Calling pcre_free from C# causes a mem…

Top Page

Reply to this message
Author: Rhodri Jenkins
To: pcre-dev
Subject: [pcre-dev] [Bug 1209] Calling pcre_free from C# causes a memory access violation
------- You are receiving this mail because: -------
You are on the CC list for the bug.


--- Comment #4 from Rhodri Jenkins <rjenkins22@???> 2012-02-28 15:32:49 ---
Hi Philip

Yes I did resolve this in a fashion. What I did was add a new function
which I exported from the pcre3.dll. This was void pcre_free_regex (void *
ptr) which call free internally.

This function just calls free internally on the pointer to the regex
structure I got from pcre_compile. The reason why I need to do this I
believe is that I am calling pcre from C#. There were not way I could find
to call pcre_free successfully because its is a function pointer and I
could not free up the structure pointer because it is allocated on the
unmanaged memory space. The simple exported function pcre_free_regex
worked just fine.

The other problem I encountered in the windows build files supplied fro
MSVC 2008 do not contain the necessary link and manifest settings to
generate a manifest file. Without a manifest the dll will generate a c run
time access error when it attempts to lad the msvcr80.dll. I played around
with this for quite a while and I got past the msvcr80.dll load issue then
it fell over again trying to load another dependent dll, either
kernel32.dll or ntldll.dll. In the end I migrated the project from MSVC
2008 to MSVC 2010 which allows you to load dll's without a manifest which
is much easier to achieve.

If you are interest in these changes I can supply the amended code with
some instructions. There is basically one extra c file with a three line
function pcre_free_regex.. A function prototype for this function in
pcre.h and migrated solution and project files.

Rhodri Jenkins
Application Architect


CSC ? This is a PRIVATE message. If you are not the intended recipient,
please delete without copying and kindly advise us by e-mail of the
mistake in delivery. NOTE: Regardless of content, this e-mail shall not
operate to bind CSC to any order or other contract unless pursuant to
explicit written agreement or government initiative expressly permitting
the use of e-mail for such purpose ? CSC Computer Sciences Limited ?
Registered Office: Royal Pavilion, Wellesley Road, Aldershot, Hampshire,
GU11 1PZ, UK ? Registered in England No: 0963578

From:   Philip Hazel <ph10@???>
To:     Rhodri L Jenkins/GBR/CSC@CSC
Date:   28/02/2012 15:09
Subject:        [Bug 1209] Calling pcre_free from C# causes a memory 
access violation
Sent by:        admin@???

------- You are receiving this mail because: -------
You are on the CC list for the bug.
You reported the bug.


--- Comment #3 from Philip Hazel <ph10@???> 2012-02-28
15:11:56 ---
> This might be a basic question but if pcre_free is a function pointer is

> this used to supply a function pointer to the pcre code to be called

> the pcre dll needs to delete the compiled pcre structure returned from
> pcre_compile? Am I correct to assume that I need to free the pcre
> structure returned by pcre_compile to avoid a memory leak?

Did you manage to resolve this? I so, I would like to close this issue. By
default, pcre_free is a pointer to the system function free(), just as
pcre_malloc points to malloc(). They are indirected so that applications
catch them if they need to.


Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email