ポインターが指し示すオブジェクトが解放されないようにするのに問題があります。私はこれが問題だと思うが、私はそれを解決する方法を知らない。ポインターが何も指し示されないようにする
マイコード:
enum TOKEN_TYPE {
OPEN, CLOSE, TEXT
};
struct Token {
int type;
std::string value;
};
typedef std::vector<Token>::iterator token_it;
Tree::Tree(token_it start) {
root.value = start->value;
createNode(++start, &root);
}
void Tree::createNode(token_it it, Node* parent) {
Node current;
current.value = it->value;
current.parent = parent;
if(parent != 0) {
parent->children.push_back(¤t);
}
++it;
while(it->type != TOKEN_TYPE::CLOSE && it->value != current.value) {
if(it->type == TOKEN_TYPE::OPEN) {
createNode(it, ¤t);
}
++it;
}
}
は私のプログラムは、ガベージコレクションがparent
が何を指しているの葉current
解放createNode
通話を終了するには始まる最後まですべての完璧なプログラムをステップ実行してみました。少なくともそれは私が起こっていると思います。
C++は、デフォルトでは何のガベージコレクタを持っていません。コードは確かにあなたが思うように起こっていません。コードに何が間違っているかを人々に見てもらいたい場合は、コンパイルするものを提供する必要がありますので、自分で試してみることができます。 –
訂正:明示的にそうしない限り、_explicitly allocated_は何も削除されません。ここでの問題は、 'current'がスタック上にあり、スコープから外れると破壊されることです。 – Chowlett
それでは、 'Node'のデストラクタが呼び出されないと、なぜ呼び出されているのですか? (Chowlett ninjaが回答しました) – Lerp