Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1038875
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T15:01:48+00:00 2026-05-16T15:01:48+00:00

Supposing the following situation: typedef struct rgb_t {float r,g,b} rbg_t; // a function for

  • 0

Supposing the following situation:

typedef struct rgb_t {float r,g,b} rbg_t;

// a function for allocating the rgb struct
rgb_t* rgb(r,g,b) {
 rgb_t* c = malloc(sizeof(rgb_t));
 c->r=r;
 c->g=g;
 c->b=b;
 return c;
}

// expose rgb creation to lua
int L_rgb (lua_State* L) {
 rgb_t** ud = (rgb_t **) lua_newuserdata(L, sizeof(rgb_t *));
 *ud = rgb(lua_tonumber(L,1),lua_tonumber(L,2),lua_tonumber(L,3));
 return 1;
}

When the L_rgb function is called from Lua two allocations happen. Lua allocates new userdata and the rgb constructor function allocates for the struct. What happens to the userdata variable when the variable goes out of scope in Lua? If it is garbage collected what happens to the allocation of the struct?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T15:01:48+00:00Added an answer on May 16, 2026 at 3:01 pm

    You have two approaches to this situation, and both could apply to your specific case. Other cases drive you more strongly to choose one over the other.

    1. You can do as you do in your sample, and use malloc() to get your private data block, and store a pointer to it in a full userdata. If you do this, then you must set a metatable on the userdata, and use its __gc metamethod to free the allocated block when the userdata gets garbage collected.

    2. You can use the userdata itself as the allocation for your private data block, by calling lua_newuserdata() in place of malloc(). In this case you do not need to have an __gc metamethod because Lua will be directly managing the lifetime of the allocation. You might still want to have a metatable so that you can use its __index entry to create the appearance of members named r, g, and b that retrieve their values from your struct.

    Either way, you need to think about error handling.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

What's the object type returned by Datepicker? Supposing I have the following: $(#txtbox).datepicker({ onClose:
Supposing I'm setting a background image for a web page in CSS like this:
Supposing to have something like this: #include <map> int main(){ std::map<int,int> m; m[1] =
I have to detect port aggregation configuration on Linux. Supposing that the ifcfg-* files
When supplying dates to a stored procedure via a parameter I'm a little confused
When supporting a new web app in an enterprise environment, it is often necessary
I'm considering supporting both Textile and Markdown on a current project. I would prefer
A remote site is supplying a data structure in a js file. I can
I'm supporting an existing application written by another developer and I have a question
What's the general consensus on supporting Windows 2000 for software distribution? Are people supporting

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.