luabindを使ってluaスクリプトにstl :: vector :: iteratorを返す際に奇妙な問題が発生しました。以下はluabind 0.9.1はstl iteratorを使います。一つの要素しか表示しません。
コードです:
1)私は、彼らはLuaのスクリプトによって呼び出される2つの関数を作成:
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)私は
luabind::module(L)
[
luabind::def("get_car_list", &get_car_list, luabind::return_stl_iterator)
];
luabind::module(L)
[
luabind::def("output", &output)
];
をLUAする機能をバインド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