(ここで質問したことがないので、礼儀正しくなかったらすみません)
私は GLWidget で使用するシーン グラフに取り組んでおり、bad_alloc の奇妙なケースに遭遇しています。シーン グラフの各ノード (graphNode と呼ばれる) には、次のフィールドがあります。
QString* name
graphNode* parent
std::vector<graphNode*> children
myPolygon* polygon
(myPolygon は、頂点と色のデータを格納するために作成したカスタム ポリゴン クラスです)
私の SceneGraph クラスには次のフィールドがあります。
graphNode* root
std::vector<graphNode*> allNodes
std::vector<myPolygon> allShapes
allNodes をビルドしようとすると、bad_alloc が発生します。私のルート ndoe には 5 つの子があり、std::cout を使用して子ベクトルのサイズを出力すると、5 になります。ただし、各子を allNodes にプッシュしようとすると、std::bad_alloc エラーが発生します。QT での正確なアプリケーション出力は
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
特に、プログラムが子が存在することを認識しているため、何が間違っているのかわかりません (そして、print ステートメントとデバッガーを使用してステップスルーすると、子がすべて期待どおりであることがわかります。コードを提供する必要がある場合は、喜んで提供します。
編集:誰かが尋ねたので、基本的に次のように文字を作成するコードがあります:
Node Root: name "root" polygon = 胴体の四角形 graphNode* 親 = 5 つの子の NULL ベクトル [Head、Arm1、Arm2、Leg1、Leg2]
Node Head: name "head" polygon = 頭の円 graphNode* 親 = 空の子ベクトルのルート
ノード Arm1 名 "arm1" ポリゴン = 上腕の長方形 graphNode* 親 = 1 つの子のルート ベクトル [Forearm1]
ノード Arm2 名 "arm2" ポリゴン = 上腕の長方形 graphNode* 親 = 1 つの子のルート ベクトル [Forearm2]
ノード Leg1 名 "leg1" ポリゴン = 太ももの四角形 graphNode* 親 = 1 つの子のルート ベクトル [Loweleg1]
ノード Leg2 名 "leg2" ポリゴン = 太ももの四角形 graphNode* 親 = 1 つの子のルート ベクトル [Loweleg2]
Node Forearm1 name "forearm1" polygon = 前腕の四角形 graphNode* 親 = Arm1 空の子ベクトル
ノード Forearm2 name "forearm2" polygon = 前腕の四角形 graphNode* 親 = Arm2 空の子ベクトル
ノード Lowerleg1 name "lowerleg1" polygon = カーフ グラフの長方形Node* 親 = Leg1 空の子ベクトル
ノード Lowerleg2 name "lowerleg2" polygon = カーフグラフの長方形 Node* 親 = Leg2 空の子ベクトル