פורסם 2007 בינואר 318 שנים מחבר מה עושים אם אני רוצה לבנות עץ בעל 20 איברים, ולאחר 7 הכנסות מופיעה לי ההודעה:An unhandled exception of type 'System.StackOverFlowExcpection' occurred in shira.exeויש לי אפשרות לבחור בין Break ל Continue (שגם כן סוגר את התכנית)יש אפשרות למנוע את הופעת החלון הזה ולהמשיך ת'תרגיל?????מה עושים עם המחסנית הזו?
פורסם 2007 בינואר 318 שנים stack overflow אומר שיש לך רקורסיה אינסופית. (כלומר, לא באמת אינסופית, אלא פשוט שלא מגיעה לתנאי העצירה הנורמלי שלה)
פורסם 2007 בינואר 318 שנים מחבר אז איך מוצאת ועוצרת אותה??<ההודעה מופיעה לי על השורה הראשונה בפונקציה Insert if (current->value < val) >
פורסם 2007 בינואר 318 שנים איפה בדיוק זה מופיע זה כבר לא משנה.אם תסתכלי על ה- stack שלך במצב הזה את תראי כמה עשרות/מאות קריאות לפונקציה, עם הפרמטרים של כל אחת.זה יאפשר לך לראות למה הפונקציה נקראת הרבה יותר מדי פעמים.
פורסם 2007 בינואר 318 שנים מחבר ואיפה בדיוק אני מסתכלת על הSTACK ??????????יש אפשרות לרוקן אותה?<במילים אחרות: יש בעיה, איך פותרים אותה?>תודה
פורסם 2007 בינואר 418 שנים ה- stack הוא חלק מסביבת ההרצה של התוכנית שלך, לא חלק מהתוכנית עצמה. זה שאת מקבלת את השגיאה הזו אומר שיש משהו לא בסדר באלגוריתם שלך.ב- Visual Studio 2005 את יכולה להסתכל בו דרך Debug->Windows->Call Stackנדמה לי שב- Visual Studio 6 אפשר לראות אותו דרך View->Debug Windows->Call Stack.
פורסם 2007 בינואר 418 שנים מחבר הצילו!!!!!!!!מה לא נכון פה????#include <iostream>#include <assert.h>#include "Tree.h"using namespace std;template <class T>class BRtree: public Tree<T>{private: Node<T>* parent; int color; Node<T>* Insert(T val); Node<T>* Insert(Node<T>*current, T val, Node<T>*parent); void Update (Node<T>*current); Node<T>* RemoveTop(Node<T>*); int includes(Node<T>*current, T val) const; Node<T>* includes(Node<T>*current, T val); void Right(Node<T>*current); void Left(Node<T>*current); void FixUp(Node<T>*current);public: BRtree(); void Add(T val);//äåñôú áï void Remove (T val);//îçé÷ú áï int Includes(T val) const; void getcolor(); void print();};template <class T>BRtree<T>::BRtree(){ Tree<T>(); parent = NULL; color = 0;}template <class T>void BRtree<T>::Add(T val){ Node<T>* current; Insert(val); current=includes(root,val); Node<T>*ezer; if(current->parent==NULL) { current=root; root->color=1; return; } else { while((current!=root)&&(current->parent->color==0)) { if(current->parent==current->parent->parent->left) { ezer=current->parent->parent->right; if((ezer!=NULL)&&(ezer->color==0)) { current->parent->color=1; ezer->color=1; current->parent->parent->color=0; current=current->parent->parent; } else { if(current==current->parent->right) { current=current->parent; Left(current); } else { current->parent->color=1; current->parent->parent->color=0; Right(current->parent); } } } else { ezer=current->parent->parent->left; if((ezer!=NULL)&&(ezer->color==0)) { current->parent->color=1; ezer->color=1; current->parent->parent->color=0; current=current->parent->parent; } else { if(current==current->parent->left) { current=current->parent; Right(current); } else { current->parent->color=1; current->parent->parent->color=0; Left(current->parent); } } } } root->color=1; }}template <class T> Node<T>* BRtree<T>::Insert(T val){ if (!root) { root=new Node<T>(val,NULL,NULL,NULL,0); return root; } Node<T>*p = root; return Insert(root,val,p);}template <class T> Node<T>* BRtree<T>::Insert(Node<T>*current, T val, Node<T>*parent){ if (current->value < val) { // Add to right subtree if (!current->right) { current->right=new Node<T>(val,NULL,NULL,current,0); return current->right; } else { Insert(current->right,val,current); } } else { // Add to left subtree if (!current->left) { current->left=new Node<T>(val,NULL,NULL,current,0); return current->left; } else { Insert(current->left,val,current); } }}template <class T>void BRtree<T>::Right(Node<T>*current){//current->x Node<T>*ezer=current->parent; if(current->right!=NULL) { ezer->left=current->right; } else { ezer->left=NULL; } current->right= ezer; if(ezer->parent==NULL) { current->parent=NULL; } else { current->parent=ezer->parent; if(ezer->parent->right==ezer) { ezer->parent->right=current; } else { ezer->parent->left=current; } } ezer->parent=current; if(current->parent==NULL) { root=current; }}template <class T>void BRtree<T>::Left(Node<T>*current){//current=y Node<T>*ezer=current->parent; if(current->left!=NULL) { ezer->right=current->left; } else { ezer->right=NULL; } current->left= ezer; if(ezer->parent==NULL) { current->parent=NULL; } else { current->parent=ezer->parent; if(ezer->parent->right==ezer) { ezer->parent->right=current; } else { ezer->parent->left=current; } } ezer->parent=current; if(current->parent==NULL) { root=current; }}template <class T> Node<T>* BRtree<T>::includes(Node<T>*current, T val){ // see if argument value occurs in tree if(!current) { return NULL; // not found } if (current->value == val) { return current; } if (current->value < val) { return includes(current->right,val); } else { return includes(current->left,val); }}
פורסם 2007 בינואר 418 שנים ה stack מתרוקן כשאת חוזרת מפונ מסויימת לפונ אחרת. תבדקי אילו פונ גורמות לרקורסיה האין סופית הזו.
פורסם 2007 בינואר 618 שנים מחבר נראה לי שיש לי בעיה בפונקציה INSERT, יש לי אפשרות להריץ את התכנית אבל-warning C4715: 'BRtree<int>::Insert' : not all control paths return a valueמה הלאה?
פורסם 2007 בינואר 618 שנים מחבר זאת אומרת שבקריאה הרקורסיבית לפונקציה לעשות כך: return Insert(current->right,val,current);במקום Insert(current->right,val,current);
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.