1

(ここで質問したことがないので、礼儀正しくなかったらすみません)

私は 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 空の子ベクトル

4

0 に答える 0