エラーで実行していstd::bad_alloc
ます。私が知る限り、また StackOverflow に関する調査を見た限りでは、これは、アクションを実行するために必要なメモリが不足している、または何らかの破損したデータ構造があるために発生する可能性があります (ここで説明されているように)。
私の場合、属性を含むクラスAstd::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
):
std::vector<std::vector<unsigned int> > aux;
aux=InstanceofA->GetTiles();
その正確な瞬間、 への呼び出しの後GetTiles()
、次のエラーが表示されます。
terminate called after throwing an instance of std::bad_alloc
aux
そのため、コンテナにメモリを割り当てようとするとエラーが発生します。関数にprintf()
呼び出しを配置して、少し printf デバッグを試みました。GetTiles()
std::vector<std::vector<unsigned int> > A::GetTiles()
{
printf("%i\n",tiles.size);
return tiles;
}
次に、クラッシュする前に、プログラムはコンソール ラインに奇妙な結果を表示します: -1524170727
. このすべてのコードの前に、tiles
コンテナーに影響を与える可能性のあるものは何もありません。宣言されている他のベクトルはA.h
正常に動作し、誰もが (私が理解している限り) 期待どおりに作成された後、サイズは 0 になります。また、クラス A のコンストラクターに呼び出しを配置しtiles.clear()
ようとしましたが、何もしません。
編集:関数 内の他のコンテナーを返すことも試みましたが、GetTiles()
機能します。さらに、戻り値をコンテナーに割り当てずに関数を呼び出してみました。
InstanceofA->GetTiles()
また、それも機能するため、問題は返されたコピーではなく、aux
コンテナーへの割り当てにあるはずです。エラーは奇妙なサイズのtiles
.
私はこれまで見たことがなく、Google でも何も見つかりませんでした。私はあなたが私に与えることができるどんな助けにも感謝します. どうもありがとう。SO に何かを投稿するのは 2 回目です。