Hello all,
While reorganizing my code a question about memory management in Pd arose in me. If I allocate memory within the constructor space, do I have to free this myself? If yes, how or where should I do this?
Example:
typedef struct _myclass { t_object x_obj; t_int* x_ptr; } t_myclass;
/* constructor */ void *myclass_new(t_symbol *s, int argc, t_atom *argv) { t_myclass *x = (t_myclass *)pd_new(myclass_class);
x_ptr = (t_int)malloc(32*sizeof(t_int));
myFunction((int*) x_ptr);
return (void *)x; }
Note that I still need this pointer and the memory it's pointing at in the method space.
Do I have to worry about this or is all memory freed automatically when an object is removed from its canvas?
Any hints?
Regards, Funs
On 03/24/2014 02:22 PM, Funs Seelen wrote:
Hello all,
While reorganizing my code a question about memory management in Pd arose in me. If I allocate memory within the constructor space, do I have to free this myself?
yes
If yes, how or where should I do this?
the destructor is called "free_method" in Pd-lingo and is set via class_new() [1].
so you basically would do:
void myclass_free(t_myclass*x) { free(x->x_ptr); } // ... void myclass_setup(void) { class_new(gensym("myclass"), myclass_new, myclass_free, sizeof(t_myclass), 0, ...); }
Do I have to worry about this or is all memory freed automatically when an object is removed from its canvas?
no magic is involved, thus you have to take care yourselves.
mdsa IOhannes
[1] http://iem.at/pd/externals-HOWTO/node9.html#SECTION00092100000000000000
Example:
Any hints?
Regards, Funs
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
hello,
the free method seems to be called when the object is deleted from the canvas.
is there a similar method called on Pd quit ? I'm asking that because I'm rewriting a pix_openni2 object and to free the openni context i have to call a shutdown() function on quit and not on object deletion
regards, a
-- do it yourself http://antoine.villeret.free.fr
2014-03-24 14:45 GMT+01:00 IOhannes m zmölnig zmoelnig@iem.at:
On 03/24/2014 02:22 PM, Funs Seelen wrote:
Hello all,
While reorganizing my code a question about memory management in Pd arose in me. If I allocate memory within the constructor space, do I have to
free
this myself?
yes
If yes, how or where should I do this?
the destructor is called "free_method" in Pd-lingo and is set via class_new() [1].
so you basically would do:
void myclass_free(t_myclass*x) { free(x->x_ptr); } // ... void myclass_setup(void) { class_new(gensym("myclass"), myclass_new, myclass_free, sizeof(t_myclass), 0, ...); }
Do I have to worry about this or is all memory freed automatically when
an
object is removed from its canvas?
no magic is involved, thus you have to take care yourselves.
mdsa IOhannes
[1] http://iem.at/pd/externals-HOWTO/node9.html#SECTION00092100000000000000
Example:
Any hints?
Regards, Funs
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
On 03/24/2014 02:56 PM, Antoine Villeret wrote:
hello,
the free method seems to be called when the object is deleted from the canvas.
is there a similar method called on Pd quit ?
no. see http://sourceforge.net/p/pure-data/patches/82/
fgsdr IOhannes
this patch is quite old, and seems to be included in Pd-extended since about 2 years,
is there still a good reason to not include this patch in pd-vanilla ?
thanks anyway to point me there
regards antoine
-- do it yourself http://antoine.villeret.free.fr
2014-03-24 14:58 GMT+01:00 IOhannes m zmölnig zmoelnig@iem.at:
On 03/24/2014 02:56 PM, Antoine Villeret wrote:
hello,
the free method seems to be called when the object is deleted from the canvas.
is there a similar method called on Pd quit ?
no. see http://sourceforge.net/p/pure-data/patches/82/
fgsdr IOhannes
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
On Mon, Mar 24, 2014 at 2:56 PM, Antoine Villeret antoine.villeret@gmail.com wrote:
hello,
the free method seems to be called when the object is deleted from the canvas.
is there a similar method called on Pd quit ? I'm asking that because I'm rewriting a pix_openni2 object and to free the openni context i have to call a shutdown() function on quit and not on object deletion
How about 'atexit'?
Hello IOhannes,
On Mon, Mar 24, 2014 at 2:45 PM, IOhannes m zmölnig zmoelnig@iem.at wrote:
the destructor is called "free_method" in Pd-lingo and is set via class_new() [1].
so you basically would do:
void myclass_free(t_myclass*x) { free(x->x_ptr); } // ... void myclass_setup(void) { class_new(gensym("myclass"), myclass_new, myclass_free, sizeof(t_myclass), 0, ...); }
Thanks! I now see how it works. You indeed mentioned it in the tutorial. Sorry for missing that part.
Regards. Funs