<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt"><div><span>Pls ignore last post from me - here is new info</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif; background-color: transparent; font-style: normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif; background-color: transparent; font-style: normal;"><span>have a whole list of C wrappers for OpenCV C++ functions like the one below. And all of them return a "new". I can't change them because they are becoming part of OpenCV and it would make my library perfect to have a consistently updated skeleton to wrap around.<br><br>    Mat* cv_create_Mat()
 {<br>        return new Mat();<br>    }<br><br>I can't rewrite the C wrapper for the C++ function so  I wrote  a delete wrapper like the below,The memory I'm trying to free is a Mat*, Mat is an OpenCV c++ class...and the delete wrapper works There is absolutely no memory leakage at all, but I have a lot of other C wrappers  for OpenCV C++ functions that return a new pointer...there is at least 10 of 15 and my intention is to not have to write a separate delete wrapper for all of them.  If you can show me how to write  one delete wrapper that would free any pointer I give to it that would be great...I have CvSVMParams*, Brisk*, RotatedRect*, CVANN_MLP* pointers there are a few others as well...Any help at this is greatly valued.<br><br>    void delete_ptr(void* ptr) {<br>        delete (Mat*)ptr;<br>   
 }<br><br>   ;; void operator delete  ( void* ptr );<br>    (defcfun ("delete" del) :void<br>      (ptr :pointer))<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></span></div><div style="display: block;" class="yahoo_quoted"> <br> <br> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 10pt;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> On Saturday, March 22, 2014 3:37 PM, Joeish W <joeish80829@yahoo.com> wrote:<br> </font> </div> <blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;">  <div class="y_msg_container"><div id="yiv7722747482"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue,
 Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt;"><div id="yiv7722747482"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt;"><div id="yiv7722747482"><div id="yiv7722747482yui_3_13_0_ym1_1_1395526721336_2996"><div class="yiv7722747482yui_3_13_0_ym1_1_1395526721336_2795" id="yiv7722747482yui_3_13_0_ym1_1_1395526721336_2995" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt;">Thanks for your reply..I can't rewrite the C wrapper for the C++ function so  I wrote  a delete wrapper like the below because I was getting a warning when it didn't have the char* and I heard you could  also use char* explicitly to remove warning.  My defcfun is
 standard it accepts a :pointer and returns void....I use it in my programs wherever memory need to get deleted ...I'm pretty good at knowing where to put the memory freeing functions but I still am getting memory leaks that make me have to restart.The memory I'm trying to free is a Mat*, Mat is an OpenCV c++ class...any help is appreciated<br clear="none"><br clear="none">void delete_ptr(void* ptr) {<br clear="none">    delete (char*)ptr;<br clear="none">}<br clear="none"><br clear="none"><br clear="none"><div class="yiv7722747482yqt4640369735" id="yiv7722747482yqt22814"><div class="yiv7722747482yqt2883171608" id="yiv7722747482yqt58045"><div class="yiv7722747482yqt8851980953" id="yiv7722747482yqt02477"><div class="yiv7722747482yahoo_quoted" id="yiv7722747482yui_3_13_0_ym1_8_1395523935480_15" style="display:block;"> <br clear="none"> <br clear="none"> <div class="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3261
 yiv7722747482yui_3_13_0_ym1_1_1395526721336_2800" id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3408" style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt;"> <div class="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3262 yiv7722747482yui_3_13_0_ym1_1_1395526721336_2801" id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3407" style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt;"> <div dir="ltr" id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3451"> <font id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3452" face="Arial" size="2"> On Saturday, March 22, 2014 2:31 PM, Daniel Herring <dherring@tentpost.com> wrote:<br clear="none"> </font> </div> <blockquote id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3406" style="border-left:2px solid rgb(16, 16, 255);margin-left:5px;margin-top:5px;padding-left:5px;">  <div
 class="yiv7722747482y_msg_container" id="yiv7722747482yui_3_13_0_ym1_1_1395523935480_3405">On Sat, 22 Mar 2014, Joeish W wrote:<div class="yiv7722747482yqt6583572295" id="yiv7722747482yqtfd74373"><br clear="none"><br clear="none">> I have a whole list of C wrappers for OpenCV C++ functions like the one below. And all of them return a "new".  I can't change them because they are becoming part of OpenCV and it would make my library perfect to have a consistently<br clear="none">> updated skeleton to wrap around. My question is in this case how would one of you free these "new" memory allocators...When I run them in any kind of
 loop.  It just eats up my ram, I
 end up having to restart my pc. Should I make a<br clear="none">> "delete" wrapper and use that.<br clear="none">> I've tried using foreign-free but I still have the same issue of having to restart. Any help is appreciated.<br clear="none">> <br clear="none">> Mat* cv_create_Mat() {<br clear="none">>     return new Mat();</div><br clear="none">> }<br clear="none"><br clear="none"><br clear="none">Hi Joeish,<br clear="none"><br clear="none">Long story short, you need to follow new() with delete().<br clear="none"><br clear="none">C++ new() and delete() extend C's malloc() and free() in roughly the <br clear="none">following way.<br clear="none"><br clear="none">T * new(args) {<br clear="none">   T *x=(T *)malloc(sizeof(T));<br clear="none">   x->T(args); // constructor (aka ctor)<br clear="none">   return x;<br clear="none">}<br clear="none"><br clear="none">void delete(T *x) {<br clear="none">  
 if(x) {<br clear="none">     x->~T(); // destructor (aka dtor)<br clear="none">     free(x);<br clear="none">   }<br clear="none">}<br clear="none"><br clear="none">Note that both the constructor and destructor are fairly arbitrary <br clear="none">functions, and it is common for them to do additional memory management.<br clear="none"><br clear="none"><br clear="none">- Daniel<br clear="none"><br clear="none"></div> </blockquote>  </div> </div>   </div></div></div></div> </div></div></div></div></div></div></div></div></div><br><br></div> </blockquote>  </div> </div>   </div> </div></body></html>