我正在执行std::bad_alloc
错误。据我所知,对StackOverflow的研究可能是由于缺少执行操作所需的内存或由于某种数据结构损坏(如此处所述)引起的。
就我而言,我有一个A类,其中包含一个attribute 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
负责return的函数的原型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
。
我以前从未见过,也没有在Google中找到任何东西。我会很感激您能给我的任何帮助。非常感谢。很抱歉,如果出现任何演示错误,这只是我第二次在SO上发布内容。
实际上,我已经按照许多评论我的原始帖子的人指出的步骤解决了这个问题,因此,我非常感谢大家。问题出在指针的初始化中InstanceofA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句