Pls ignore last post from me - here is new info

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.

    Mat* cv_create_Mat() {
        return new Mat();
    }

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.

    void delete_ptr(void* ptr) {
        delete (Mat*)ptr;
    }

   ;; void operator delete  ( void* ptr );
    (defcfun ("delete" del) :void
      (ptr :pointer))






















On Saturday, March 22, 2014 3:37 PM, Joeish W <joeish80...@yahoo.com> wrote:
 
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
>
>void delete_ptr(void* ptr) {
>    delete (char*)ptr;
>}
>
>
>
>
>
>
>On Saturday, March 22, 2014 2:31 PM, Daniel Herring <dherr...@tentpost.com> 
>wrote:
> 
>On Sat, 22 Mar 2014, Joeish W wrote:
>>
>>
>>> 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
>>> 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
>>> "delete" wrapper and use that.
>>> I've tried using foreign-free but I still have the same issue of having to 
>>> restart. Any help is appreciated.
>>> 
>>> Mat* cv_create_Mat() {
>>>     return new Mat();
>>> }
>>
>>
>>Hi Joeish,
>>
>>Long story short, you need to follow new() with delete().
>>
>>C++ new() and delete() extend C's malloc() and free() in roughly the 
>>following way.
>>
>>T * new(args) {
>>   T *x=(T *)malloc(sizeof(T));
>>   x->T(args); // constructor (aka ctor)
>>   return x;
>>}
>>
>>void delete(T *x) {
>>  
 if(x) {
>>     x->~T(); // destructor (aka dtor)
>>     free(x);
>>   }
>>}
>>
>>Note that both the constructor and destructor are fairly arbitrary 
>>functions, and it is common for them to do additional memory management.
>>
>>
>>- Daniel
>>
>>
>
>

Reply via email to