呼び出された単純な再帰構造体Recursive
があり、その const 配列をプログラムが必要とする値で初期化したいと考えています。次に、 と呼ばれる単純なイテレータ関数を使用IterateAux
し、main
. 今までのコードを見てください:
#include <iostream>
#include <string>
struct Recursive
{
std::string data;
Recursive* Children;
};
void IterateAux(Recursive* Item)
{
int i = -1;
while (Item[++i].data != "")
{
std::cout << Item[i].data << "\n";
if (Item[i].Children)
IterateAux(Item[i].Children);
}
}
int main()
{
IterateAux( (Recursive*)Parent );
return 0;
}
次のような const 配列がある場合は、次のように機能します。
const Recursive Children[] = {
{"Child1", NULL},
{"Child2", NULL},
{"", NULL}
};
const Recursive Parent[] = {
{"Parent1", NULL},
{"Parent2", NULL},
{"Parent3", Children },
{"", NULL}
};
しかし、次のネストされたフォームはそうではありません:
const Recursive Parent[] = {
{"Parent1", NULL},
{"Parent2", NULL},
{"Parent3", (Recursive[])
{
{"Child1",NULL},
{"Child2",NULL},
{"", NULL}
}
},
{"", NULL}
};
そして、問題はなぜですか?どうすればこれを機能させることができますか?
私の調査では、最初はポインターが無効である可能性があると考えていましたが、代わりにデータで.children
試してみると、問題なく機能しました。int
std::string
データを使用std::string
すると、GDB がメッセージとともにクラッシュするDuring startup program exited with code 0xc0000135.
ため、プログラムをデバッグすることさえできません! 配列の初期化コードがどこかで混乱しているのかもしれません...
これらすべてをGCC 4.6で試しました。