From: Lancet <Lan...@gm...> - 2006-02-21 23:15:42
|
The great swig tutorial at http://www.swig.org/tutorial.html shows the use of a function called get_time() which returns a pointer to char. My question is, where is this string deallocated after it was used? In the file exampl_wrap.c I found this: static VALUE _wrap_get_time(int argc, VALUE *argv, VALUE self) { char *result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); result = (char *)get_time(); vresult = rb_str_new2(result); return vresult; } To me it seems that more and more memory would be allocated by calling this function over and over again. get_time() should produce strings which are never deallocated again. Does rb_str_new2 do that job? Here is what it does (hope I got the right file): VALUE rb_str_new2(ptr) const char *ptr; { if (!ptr) { rb_raise(rb_eArgError, "NULL pointer given"); } return rb_str_new(ptr, strlen(ptr)); } Well, I'm sure that the memory is freed again somewhere. Could someone please enlighten me? -- View this message in context: http://www.nabble.com/Swig-example-get_time%28%29-mem-cleanup-t1165301.html#a3060318 Sent from the swig-user forum at Nabble.com. |