Собственно ситуация такая: у меня есть библиотека для lua
(написана на c++
) которая предоставляет доступ к некоему объекту из c++
кода (допустим, вектору). При этом этот объект аллоцирует память в куче, а сам объект я размещаю в userdata
lua
, примерно так:
std::vector<int> *buf = reinterpret_cast<std::vector<int> *>(lua_newuserdata(state, sizeof(std::vector<int>)));
new (buf) std::vector<int>(10);
Помните: то, что выше - это вызов C++
из Lua
! Когда я вызываю из C++
(!) скрипт на lua
, который возвращает мне подобный объект (userdata
с размещенным в нем std::vector
) в с++ я произвожу нечто подобное:
std::vector<int> out;
auto *vec = reinterpret_cast<std::vector<int>*>lua_touserdata(state, -1));
if (vec) {
out = std::move(*out);
}
Как видите, я использую move
чтобы избежать ненужного копирования. Так вот, все вроде работало прекрастно, пока не потребовалось собрать прилагу под windows
. В результате я начал получать segmentation fault
из-за того, что out
был поврежден. Как-будто, несмотря на move
данные выделенные в куче были освобождены по выходу из скрипта. Собственно вопрос: насколько безопасно перемещать таким образом данные?
PS lua-5.1.5
PSS также забыл упомянуть, что для избежания утечек памяти объекту в lua
был добавлен метод __gc
в котором просто вызывается деструктор условного вектора. Он отрабатывает по завершению всего скрипта
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Запустил бесконечный поток из окна mainwindowСоздал диалоговое окно menu по нажатию на кнопку мне нужно остановить бесконечный поток
Всем еще раз здрасте)Сейчас попробую более дитально описать проблему
мне нужно сделать код так, чтобы получился пример под цифрой 2 но код я смог сделать только так, что у меня получается пример под цифрой 1 Как...