1

エラーで実行してい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 回目です。

4

1 に答える 1

1

実際、元の投稿にコメントしてくれた多くの人が指摘した手順に従って問題を解決したので、本当に感謝しています。問題はポインタの初期化にありましたInstanceofA

于 2014-08-25T18:10:39.643 に答える