带指针,引用和值的bad_alloc

时间:2016-01-01 22:29:37

标签: c++

我实际上对c ++很新。我试着写一个函数模板,传递参数作为参考。

这样做的时候我得到了一个std :: bad_alloc。所以我也尝试将它作为值传递,甚至通过指针传递。我总是得到一个std :: bad_alloc,但我很确定,该对象存在且地址是正确的(用调试器检查)。

我的最后一次尝试是在函数中创建对象。它是有效的,如果我使用硬编码数据,但如果我传递数据,则需要创建对象,作为函数参数。

我正在使用特定的数值模拟框架(http://www.dune-project.org/),所以我不确定,如果示例代码是有用的。我刚刚联系了框架支持,他们不知道这个问题来自哪里。

我希望有人可以帮助我或者有一个想法,如何解决这个/工作的问题!

代码示例:

 template<const int dim, const int k>
int solvePoissonPDE2(int maxlevel, Dune::YaspGrid<dim>& grid)
{
    /*
    * Debugging Notes:
    * function works, if grid, fieldvector, array AND bitset are created inside the function
    * BUT NOT if grid OR the components used to create a grid are passed as reference, value or pointer parameters (SEGMENTATION FAULT)
    */
    try {

        /*// make grid
        Dune::FieldVector<double, dim> L(1.0);
        Dune::array<int, dim> N(Dune::fill_array<int, dim>(1));
        std::bitset<dim> B(false);
        Dune::YaspGrid<dim> grid(L, N, B, 0);*/
        grid.globalRefine(maxlevel - 1);

        // get view
        using GV = typename Dune::YaspGrid<dim>::LeafGridView;
        const GV &gv = grid.leafGridView();


        const int q = 2 * k;
        // make finite element map
        using DF = typename GV::Grid::ctype;
        using FEM = Dune::PDELab::QkLocalFiniteElementMap<GV, DF, double, k>;
        FEM fem(gv);

        BCTypeParam bctype;
        // solve problem
        using Constraints = Dune::PDELab::ConformingDirichletConstraints;
        poisson_driver<GV, FEM, BCTypeParam, Constraints>(gv, fem, "poisson_yasp", bctype, false, q);


        return 0;
    }
    catch (Dune::Exception &e){
        std::cerr << "Dune reported error: " << e << std::endl;
        return false;
    }
    catch (std::string &e){
        std::cerr << "An error has been detected: " << e << std::endl;
        return false;
    }
    catch (std::exception &e){
        std::cerr << "STL reported error: " << e.what() << std::endl;
    }
    catch (...){
        std::cerr << "Unknown exception thrown!" << std::endl;
        return false;
    }


}

所有使用的功能都在运行并经过测试。

0 个答案:

没有答案