Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Do strings from rb_str_new and friends need to be free'd?

208 views
Skip to first unread message

Steven Kah Hien Wong

unread,
May 9, 2008, 11:21:57 PM5/9/08
to
[Note: parts of this message were removed to make it a legal post.]

Hi,

I have some C native code that calls a logging class written in Ruby. To
pass the message string to the Ruby class, I am creating a string with
rb_str_new2 and then passing its VALUE to rb_funcall. I am wondering if I
need to do any clean-up for the string, or will Ruby handle this for me?

Also, if anyone can suggest an awesome doc on writing Ruby native
extensions, that would be appreciated. At the moment, I am mostly using the
Pickaxe online book.

Here is the code in question:

void log_warning(const char *fmt, ...)
{
char message[BUFFER_LEN]; // Temporary buffer to hold the generated
message

// Evaluate the format string and store it in the temporary buffer
va_list ap;
va_start(ap, fmt);
vsnprintf(message, BUFFER_LEN, fmt, ap);
va_end(ap);

// Find the ID's to call tho Log.warning Ruby class method
rb_require("log");
ID log_class = rb_path2class("Log");
ID log_warning_method = rb_intern("warning");

// Create a Ruby string containing a copy of the formatted message
VALUE message_value = rb_str_new2(message);

// Call Log.warning, with the formatted message as an argument
rb_funcall(log_class, log_warning_method, 1, message_value);

// Do I need to do anything here to tell Ruby to clean up the
string?
}

Thanks!

-Steven

Yukihiro Matsumoto

unread,
May 9, 2008, 11:36:04 PM5/9/08
to
Hi,

In message "Re: Do strings from rb_str_new and friends need to be free'd?"


on Sat, 10 May 2008 12:21:57 +0900, "Steven Kah Hien Wong" <ste...@zensaki.com> writes:

|I have some C native code that calls a logging class written in Ruby. To
|pass the message string to the Ruby class, I am creating a string with
|rb_str_new2 and then passing its VALUE to rb_funcall. I am wondering if I
|need to do any clean-up for the string, or will Ruby handle this for me?

The latter. You don't have to (and you shouldn't) free string
objects.

matz.

Steven Kah Hien Wong

unread,
May 11, 2008, 1:14:30 AM5/11/08
to
[Note: parts of this message were removed to make it a legal post.]

Ah, cool. Thanks, Matz!

-Steven

On Sat, May 10, 2008 at 1:36 PM, Yukihiro Matsumoto <ma...@ruby-lang.org>
wrote:

0 new messages