【问题标题】:C++ Call Lua FunctionsC++ 调用 Lua 函数
【发布时间】:2021-04-15 20:39:53
【问题描述】:

我即将在我的项目中包含 Lua。只有一个问题,如果我链接我自己的类并在 Lua 中创建它,堆栈没有清理,我得到内存泄漏。内存不断增加。

我的班级:

class CTest
{
public:
    CTest(std::string s)
        : m_s(s)
    {
        std::cout << s << std::endl;
    }

    ~CTest()
    {

    }

private:
    std::string m_s;
};

C++ 测试代码:

    auto state = luaL_newstate();
    luaL_openlibs(state);

    luabridge::getGlobalNamespace(state)
        .beginClass<CTest>("Test")
            .addConstructor<void(*)(std::string)>()
        .endClass();

    int iState = luaL_dofile(state, "Test.lua");

    while (true)
    {
        int nStatus = 0;

        lua_getglobal(state, "test");
        nStatus = lua_pcall(state, 0,0,0);
    }

Lua 代码

local ii = 0

function test()
    local i = Test("Hallo " .. ii)
    ii = ii + 1
end

我正在使用 Lua 5.2.0。

【问题讨论】:

  • 无法复制。记忆对我来说是不变的。
  • 你也用过 LuaBridge?
  • 是的。我按原样使用了您的确切代码,只是在它之前添加了 #includes 并在它周围添加了一个 main 函数。
  • LuaBridge 的哪个版本?
  • 与其问我使用的是什么版本,不如编辑您的问题以包含您使用的版本?还有 Lua 本身的版本

标签: c++ lua luabridge


【解决方案1】:

我可以在 Lua 5.2.0 上重现您的问题,但不能在 Lua 5.2.1 或任何更新版本上重现。我的结论是,这只是 Lua 5.2.1 之前版本中的一个错误。只需更新到现代版本的 Lua,您也不应该遇到问题。

【讨论】:

  • @darealcore 社区不会因为问题已经解决而为您关闭问题。您需要通过单击其上的复选标记图标自行接受答案。
猜你喜欢
  • 2014-09-01
  • 2015-07-14
  • 2013-02-19
  • 2015-12-30
  • 2022-01-04
  • 2018-09-16
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多