निम्नलिखित स्थिति मान लें:लुआ: कचरा संग्रहण + userdata
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;
}
L_rgb समारोह लुआ से कहा जाता है जब दो आवंटन होता है। लूआ नए उपयोगकर्ता डेटा और आरजीबी कन्स्ट्रक्टर फ़ंक्शन को आवंटित करने के लिए आवंटित करता है। जब उपयोगकर्ता लूआ में गुंजाइश से बाहर हो जाता है तो उपयोगकर्ता डेटा वैरिएबल का क्या होता है? यदि यह कचरा है तो संरचना के आवंटन के साथ क्या होता है?
विधि # 2 आपको आवंटन ट्रैकिंग से छुटकारा दिलाएगा - लुआ त्रुटियों और स्टैक रिवाइंड पर, लुआ का जीसी अभी भी कोड ब्लॉक को उचित रूप से ट्रैक और रिलीज़ करेगा। – u0b34a0f6ae
क्या कोई बदलाव है जो आप यहां सहायता कर सकते हैं: http://stackoverflow.com/questions/41080633/can-i-load-additional-functions-in-base-open-without-breaking-lua-state? – displayname