-2
なぜ私のコードがセグフォールトであるのか分かりません。私はキュー内のどこにも何もないところを見ていると仮定していますが、要素をキューにプッシュすると思っていました。セグメンテーションフォールトC++
HERESに私のコード:if
文はforループ内で働いている場合は、私がチェックしたときに、それはそれに入るが、その場合イムわからいないため
template <typename T>
class btree {
public:
btree(size_t maxNodeElems);
~btree() {}
struct node {
list <T> elements;
node *lvl;
};
private:
size_t maxNodeElems;
node* root;
};
template <typename T>
btree<T>::btree(size_t maxNodeElems) {
if (maxNodeElems > 0) max = maxNodeElems;
root = new node;
root->lvl = new node*[max+1];
for (int i = 0; i < (int) max+1; i++) root->lvl[i] = new node;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const btree<T>& tree) {
queue <typename btree<T>::node*> q;
q.push(tree.root);
int loop = 0;
while (!q.empty()) {
loop++;
typename btree<T>::node* temp = q.front();
int i = 0;
class list <T>::iterator itr = temp->elements.begin();
for (; itr != temp->elements.end(); ++itr) {
os << *itr << " ";
if (!temp->lvl[i]->elements.empty()) {
q.push(temp->lvl[i]);
}
i++;
}
q.pop();
}
return os;
}
誰かが私を助けることができる、イムが失わより多くのコード私のTEST.CPPで
template <typename T>
pair <typename btree<T>::iterator, bool> btree <T>::insert (const T& elem) {
pair <typename btree<T>::node, bool> start;
start = addElement (elem, root);
pair <typename btree<T>::iterator, bool> final;
return final;
}
template <typename T>
pair <typename btree<T>::node, bool> btree<T>::addElement (const T& e, typename btree<T>::node*& n) {
pair <typename btree<T>::node, bool> elemPair;
if (n->elements.size() == max) {
int count = 0;
class list <T>::iterator itr = n->elements.begin();
for (; itr != n->elements.end(); ++itr) {
count++;
if (e < *itr) {
count--;
elemPair = addElement (e, n->lvl[count]);
} else if (e == *itr) return make_pair (*n, false);
}
} else {
n->elements.push_back(e);
n->elements.sort();
}
return make_pair(*n, true);
}
:
EDITを押し
int main (void) {
btree<char> b(2);
b.insert('Z'); b.insert('J'); b.insert('Y');
cout << b;
return 0;
}
デバッグシンボル( 'gcc -g -O0')でコンパイルし、' valgrind'を通して実行します。 –
@BrendanLongそれは何をしますか(まだプログラミングにはまだ新しいです) – SNpn
あなたのコードが壊れている場所を教えてくれます。これらの手順はLinux上で動作します(プログラムがどこで、なぜあなたのプログラムがクラッシュするのかを正確に伝えます)。 IDEのデバッガを使用すると、他のプラットフォームでも同様の結果が得られます。 –