自定义Lua分配函数的释放抛出COMException

时间:2017-02-12 20:58:19

标签: c# .net lua pinvoke luajit

我试图使用自定义分配函数来控制Lua使用的内存量,但由于某种原因,我得到一个COMException,而Lua试图释放内存,说一个参数无效(HRESULT: 0x80000003),如果我让创建和扩展字符串的脚本运行几秒钟。这是我的自定义分配功能:

private static IntPtr Alloc(IntPtr ud, IntPtr ptr, int osize, int nsize)
{
    if (nsize == 0)
    {
        Marshal.FreeHGlobal(ptr);
        return IntPtr.Zero;
    }
    else
    {
        if (osize == 0)
            return Marshal.AllocHGlobal(nsize);
        else
            return Marshal.ReAllocHGlobal(ptr, (IntPtr)nsize);
    }
}

没有什么特别之处,我只是用lua_setallocf设置该函数,然后开始在循环中创建和连接字符串,以引起内存更改。在托管C ++中也会发生同样的事情,使用realloc和free,虽然我不知道那些是否真的在幕后做同样的事情。

如果我使用Lua的股票分配功能,一切正常。有没有人知道可能导致这种情况的原因?

更新: 我刚刚发现这只发生在使用 LuaJit ,而不是官方的Lua 5.1二进制文件......

0 个答案:

没有答案