首页 > 解决方案 > 尝试将 sf::Texture* 推入 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 的东西,一切都很好。此外,代码吐出在这里!一次,如果尝试检查 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;
}

我不知道发生了什么事

标签: c++vectorsfml

解决方案


我宁愿将此作为评论发布,但我没有足够的代表。

虽然这不能完全解决错误,但如果您将catch块更改为}catch(std::exception& e) {而不是}catch(std::invalid_argument& e){. 抛出的异常可能不是 invalid_argument 异常,并且捕获所有异常作为包罗万象效果更好。假设这可行,您还可能会收到一条信息更丰富的错误消息,从而更好地了解出了什么问题。


推荐阅读