尝试将 sf::Texture* 推入 std::vector 时出错
Error when trying to push sf::Texture* into std::vector
我正在开发一个使用 SFML 和 lua 的 C++ 项目
问题是当我试图推动我加载的纹理指针时它崩溃了。
这是我的代码
sf::Texture* tex = new sf::Texture;
if(!tex->loadFromFile(lua_tostring(L, -1))) std::cout << "Failed to load texture!" << std::endl;
std::cout << "Got here!" << std::endl;
try{
p.tex_auras.push_back(tex);
}catch(std::invalid_argument& e){
std::cout << "Error: " << e.what() << std::endl;
}
如果我注释掉 push_back 东西,一切都很好。此外,代码吐出 Got here! 一次,如果尝试检查 tex->loadFromFile() 以查看它是否失败,则没有。当我调试代码时,它似乎发生在 std::vector::push_back
void push_back(const value_type &__x) {
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) { <<== HERE ==
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x);
++this->_M_impl._M_finish;
} else
_M_realloc_insert(end(), __x);
}
编辑
typedef std::vector<sf::Texture*> Textures;
// The textures was initialized in a class as such
class Player {
public:
// Just like that
Textures tex_auras;
}
不知道怎么回事
我宁愿post将此作为评论,但我没有足够的代表。
虽然这不能完全解决错误,但如果将 catch
块更改为 }catch(std::exception& e) {
而不是 }catch(std::invalid_argument& e){
,则可能可以避免崩溃。抛出的异常可能不是 invalid_argument 异常,捕获所有异常作为一个包罗万象的效果更好。假设这行得通,您最终可能还会得到一条信息更丰富的错误消息,从而更好地了解出了什么问题。
显然,在我从 lua 加载用户数据后,播放器首先是 NULL。我在错误的堆栈索引
我正在开发一个使用 SFML 和 lua 的 C++ 项目 问题是当我试图推动我加载的纹理指针时它崩溃了。
这是我的代码
sf::Texture* tex = new sf::Texture;
if(!tex->loadFromFile(lua_tostring(L, -1))) std::cout << "Failed to load texture!" << std::endl;
std::cout << "Got here!" << std::endl;
try{
p.tex_auras.push_back(tex);
}catch(std::invalid_argument& e){
std::cout << "Error: " << e.what() << std::endl;
}
如果我注释掉 push_back 东西,一切都很好。此外,代码吐出 Got here! 一次,如果尝试检查 tex->loadFromFile() 以查看它是否失败,则没有。当我调试代码时,它似乎发生在 std::vector::push_back
void push_back(const value_type &__x) {
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) { <<== HERE ==
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x);
++this->_M_impl._M_finish;
} else
_M_realloc_insert(end(), __x);
}
编辑
typedef std::vector<sf::Texture*> Textures;
// The textures was initialized in a class as such
class Player {
public:
// Just like that
Textures tex_auras;
}
不知道怎么回事
我宁愿post将此作为评论,但我没有足够的代表。
虽然这不能完全解决错误,但如果将 catch
块更改为 }catch(std::exception& e) {
而不是 }catch(std::invalid_argument& e){
,则可能可以避免崩溃。抛出的异常可能不是 invalid_argument 异常,捕获所有异常作为一个包罗万象的效果更好。假设这行得通,您最终可能还会得到一条信息更丰富的错误消息,从而更好地了解出了什么问题。
显然,在我从 lua 加载用户数据后,播放器首先是 NULL。我在错误的堆栈索引