我正在使用Lua,它有一个C API和其错误引发函数使用longjmps。在引发错误时,我首先构建描述出错原因的消息,然后告诉Lua引发错误。例如:
std::stringstream ss;
ss << "'" << function->cb->name << "' expects at most " << maxargs_all
<< " argument(s) and received " << nargs;
luaL_error(L, ss.str().c_str());
据我理解,longjmp不会撤销栈,因此我的stringstream对象不会被销毁。如果我没记错的话,stringstream和其他C ++库类通常在堆上分配数据,在对象被销毁时释放。然而,在这里不会调用析构函数,所以我认为这将导致内存泄漏。根据编写脚本的人,我可能会引发很多错误,从而造成大量内存泄漏。
我确信其他人也需要解决类似的问题,但我找不到任何符合我要求的东西。许多地方说对象不会被销毁,但我认为必须有一种方法确保内存被释放?
ss.str().c_str()
。 - Nicol Bolasss.str()
返回的string
是否超出了作用域,从而可能使 c 字符串无效? - user1520427