各ノード(構造体)に名前とキューの文字列フィールドがあるツリーを作成しようとしています<ノード> *フィールドその子ノードを含むキューキューにプッシュするときにランタイムクラッシュが発生する
以下のサンプルコードは、私が大規模で複雑なプログラムで受け取っているエラーを分離する小さなプログラムです。私のエラーとは無関係のものはすべて削除しますが、問題の元のコードに似ています。完全なコードと同じ場所で同じエラーが発生します。これはランタイムクラッシュです。コンパイラはコンパイル時に警告を表示しません。
クラッシュは、ポインターから参照された後に関数に参照渡しされたキューの1つにノードをプッシュしようとすると発生します。
私のコードに数字を含むコメントは、それに続く実行順序を示しています。
#include <string>
#include <queue>
#include <iostream>
using namespace std;
using std::string;
using std::queue;
// the tree node structure
typedef struct Node
{
string name; // the name of this node
queue<Node>* children; // a queue containing the child nodes
} Node;
Node makeNode(string name)
{
queue<Node> children = {}; // 2, 7, 12
Node n = {name, &children}; // 3, 8, 13
return n; // 4, 9, 14
}
void funcTwo(queue<Node>& nodes)
{
Node n = makeNode("Child of Child of Root"); // 11
cout << "Program prints this." << endl; // 15
nodes.push(n); // PROGRAM CRASHES HERE
cout << "Program does not print this." << endl;
}
void funcOne(queue<Node>& nodes)
{
Node n = makeNode("Child of Root"); // 6
funcTwo(*n.children); // 10
nodes.push(n);
}
int main()
{
Node root = makeNode("Root"); // 1
funcOne(*root.children); // 5
return 0;
}
ありがとうございます!
コンパイラ:x86用のMicrosoft(R)C/C++最適化コンパイラバージョン19.00.23506
OS:Windows 7のProfessionalは、あなたの
makeNode
機能で