1

公式リリースは古く、boost の最新バージョンではコンパイルされないため、現在 luabind、具体的にはhttps://github.com/rpavlik/luabindを使用しています。

ネット上のどこにも見つからない、非常に奇妙な問題が発生しています。ケースを非常に単純なシナリオに減らすことができました。

1 つのモジュールには、次のものがあります。

luabind::object value;

void functionA() {
    lua_pushstring(L,"yo");
    luabind::object temp(luabind::from_stack(L,-1));
    value = temp;
}

別のモジュールでは、次のようになります。

void functionB() {
    printf("My Value: %s\n",luabind::object_cast<const char*>(value));
    printf("My Original value type: %d\n",luabind::type(value));
    value.push(L);
    luabind::object a1(luabind::from_stack(L,-1));
    printf("My Copy value type: %d\n",luabind::type(a1));
}

lua から functionA と functionB を使用できるようにして、それらを連続して呼び出すと、出力は次のようになります。

My Value: yo
My Original value type: 4
My Copy value type: 0

ご覧のとおり、オブジェクトはまだ luabind が出力できるものを参照しています。しかし、それをスタックにプッシュして、スタック オブジェクトから新しいオブジェクトを作成しようとすると、値が nil になります。

これは、この特定のケースでのみ発生します。すべてを 1 つの関数に入れると、問題なく動作します。コードを同じモジュールの関数に入れると、正常に動作します。私はまだスタンドアロンのテスト プロジェクトを作成していませんが、コード内で干渉するものは何も考えられません。関数は lua から直接連続して呼び出されます。

私は何か間違ったことをしていますか?それともこれはバグですか?もしそれがバグなら、なぜ私はこのようなことを聞​​いたことがないのでしょうか?

4

1 に答える 1