我正在运行std::bad_alloc错误。据我所知,对StackOverflow的研究可能是由于缺少执行操作所需的内存,或者是由于某种数据结构(as explained here)损坏引起的。

就我而言,我有一个,其中包含一个属性std::vector<std::vector<unsigned int> > tiles。以这种方式在A.h中创建此容器时没有错误:

class A
{
    public:

        //function prototypes
        std::vector<std::vector<unsigned int> > GetTiles();

    protected:
    private:

        std::vector<std::vector<unsigned int> > tiles; //declaration

};

另外,我已经编写了GetTiles函数的原型(prototype),该函数负责返回tiles。这是使用以下代码在A.cpp中完成的:
std::vector<std::vector<unsigned int> > A::GetTiles()
{
    return tiles;
}

稍后,另一个类 B 打算使用像这样的GetTiles(B.cpp)获取tile容器:
std::vector<std::vector<unsigned int> > aux;
aux=InstanceofA->GetTiles();

在那个确切的时刻,在调用GetTiles()之后,出现以下错误:
terminate called after throwing an instance of std::bad_alloc

因此,当尝试为aux容器分配内存时,它指出一个错误。
我试图通过在printf()函数中放置一个GetTiles()调用来进行一些printf调试:
std::vector<std::vector<unsigned int> > A::GetTiles()
{
    printf("%i\n",tiles.size);
    return tiles;
}

然后,在崩溃之前,该程序在控制台行-1524170727上显示一个奇怪的结果。
在所有这些代码之前,没有什么可能影响tiles容器,并且在A.h中声明的其他 vector 正常运行,并且按照每个人的预期(据我所知),大小为0。我也尝试将tiles.clear()调用放置在类A的构造函数中,但是它什么也没做。

编辑:我也尝试过在GetTiles()函数中返回其他容器,并且它可以工作。此外,我还尝试仅在不将其返回值分配给任何容器的情况下调用该函数:
InstanceofA->GetTiles()

而且它也有效,因此问题不应该出在返回的副本中,而应该是分配给aux容器。我猜想错误会绕过tiles怪异的大小。

我以前从未见过,也没有在Google中找到任何东西。我会很感激您能给我的任何帮助。非常感谢。
很抱歉,如果出现任何演示错误,这只是我第二次在SO上发布内容。

最佳答案

实际上,我已经按照许多评论我的原始帖子的人指出的步骤解决了这个问题,因此,我非常感谢大家。问题出在指针InstanceofA的初始化中

10-05 18:12