我在使用luabind將stl :: vector :: iterator返回到lua腳本時遇到了一個奇怪的問題。luabind 0.9.1使用stl迭代器只顯示一個元素
下面是代碼:
1)I創建了兩個功能它們通過LUA腳本調用:
std::vector<car*> get_car_list()
{
std::vector<car*>* vec = new std::vector<car*>();
vec->push_back(new car("I'm the 1st"));
vec->push_back(new car("I'm the 2nd"));
return *vec;
}
void output(const std::string& msg)
{
std::cout << "lua:" << msg << std::endl;
}
2)I結合的功能LUA
luabind::module(L)
[
luabind::def("get_car_list", &get_car_list, luabind::return_stl_iterator)
];
luabind::module(L)
[
luabind::def("output", &output)
];
3)我做如下腳本:
function test()
items = get_car_list();
for item in items do
output(item:get_name());
end
end
4)結果是: 在輸出窗口,它只是顯示:
lua:I'm the 1st
而且該程序是在luabind/policy.hpp突破:754
template <>
struct default_converter<std::string>
: native_converter_base<std::string>
{
.....
void to(lua_State* L, std::string const& value)
{
lua_pushlstring(L, value.data(), value.size()); // !!Break Here with Error EXC_BAD_ACCESS
}
};
我想顯示std :: vector中的所有元素,但它只顯示第一個元素並崩潰。
非常感謝! :)
傑森
與這個問題無關:你的'get_car_list'函數泄漏內存,它在堆上分配一個向量,並通過值返回它。函數返回後,指向堆中向量的指針將丟失。 – Begemoth