在已经创建的向量中奇怪的std :: bad_alloc

时间:2014-08-25 17:28:22

标签: c++ vector std bad-alloc

我正在运行std::bad_alloc错误。据我所知,正如我所见,研究StackOverflow,这可能是由于缺乏必要的内存来执行某个操作,或者是因为存在某种损坏的数据结构(as explained here)。

在我的情况下,我有一个 A 类,其中包含属性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的原型,它负责返回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中声明的其他向量在正常情况下行为并且在创建之后具有0大小(据我所知)(据我所知)。我也尝试将tiles.clear()调用放在A类的构造函数中,但它什么也没做。

编辑: 我也尝试在GetTiles()函数中返回其他容器,但它确实有效。此外,我还尝试调用该函数,而不将其返回值分配给任何容器,只有:

InstanceofA->GetTiles()

它也有效,所以问题不应该在返回的副本中,而应该在它对aux容器的分配中。我想这个错误会转变为奇怪的tiles

我之前从未见过这种情况,而且我在谷歌中找不到任何东西。我很感激你能给我的任何帮助。非常感谢。 如果有任何演示文稿错误,我很抱歉,这是我第二次在SO上发布内容。

1 个答案:

答案 0 :(得分:1)

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

的初始化中