קטע ביזארי... (עם cin)

קטע ביזארי... (עם cin)../images/Emo26.gif

בתוך קטע קוד, התוכנית מגיעה לשורה הבאה:
cin>>name;​
כש-name הוא פשוט מערך char בגודל 20. מסיבה לא ברורה בעליל, בזמן-ריצה מתלונן הבחור שמנסים לכתוב לו לכתובת אפס...
התוכנית קומפלה ב-VC6... למישהו יש רעיונות?... (לפני השורה הזו אין יותר מידי דברים מעניינים - יש עוד cin שכן עובד ואז בדיקה של if עם strcmp...) בתודה מראש...
 

vinney

Well-known member
ובכל זאת, שים את הקוד...

שים את כל הקוד, או שלח לי, אני אמצא לך את הבעיה.
 
אם היה לא הייתי נותן... ../images/Emo8.gif../images/Emo26.gif

ניסיתי לעזור לשניים שישבו על איזה תרגיל ב-CPP...(אז אין אצלי את הקוד) והאמת שזה היה ביזארי למדי... התוכנית עפה בשורה של ה-cin... המשתנה שהועבר לה היה char* (והוקצה לו מקום בוודאות...) והאמת - גם כשהחלפנו את המשתנה ל-int (כך שבוודאות אין בעיה של הקצאה) - התוכנית עפה... מצד שני - שתי שורות קודם cin עבד בלי בעיה... (ביזארי כבר אמרתי?) חשבתי שאולי מישהו נתקל במשהו דומה וזה יצלצל לו מוכר... (אני מניח שהוא לא ישכח את האירוע כל-כך מהר...
)
 

selalerer

New member
אורי, מנסיון פה אנחנו סומכים עליך..

...אבל לא עד כדי כך שנכריז על באג בcin בלי לראות את הקוד, זה מסכרן, תשחזר אותו...
 
אל תסמוך כ"כ...זה CPP לא java...../images/Emo13.gif

מצטער מראש על סינטקס - אני מנסה לשחזר ללא קומפיילר:
char command[20]; char name[20]; int number; cin >> command; if (strcmp(command, "something") == 0) { cin >> name >> number; // working OK... ... } if (strcmp(command, "something_else") == 0) { cin >> name; // runtime error... trying to write to address 0... ... }​
ניסיתי להחליף את הסדר של ה-if-ים... ניסיתי אפילו לכתוב:
cin>>number;​
ועדיין עף!!
 

gmorphus

New member
הקוד הזה הורץ ועף?

או שאתה משחזר מהזיכרון קוד, שכנראה ירוץ על המחשב שלי? אל תתן לנו קוד שאתה חושב שעף, תן קוד מלא שניסית לקמפל ולהריץ ועף לך.
 
כמו שאמרתי...../images/Emo26.gif

אין לי את הקוד האותנטי שעף. אבל תאמין לי - ישבתי עליו איזה שעתיים, ניסיתי לשנות מיליון דברים (את הסדר של ה-if-ים - כי חשבתי שאולי ה-strcmp דופק משהו... בסוף העפתי לגמרי את ה-strcmp ועדיין הוא צעק...) - וככה הקוד נראה... אין שום קצ'ים... זה מה שמוזר...
 

gmorphus

New member
תראה, אני לא יודע מה הבעיה

אבל קימפלתי את הקוד הזה אצלי בדיוק כמו שהוא, וזה לא עף לי (באופן מפתיע
). אז אם לא תראה לי קוד שעף לך, אני לא אוכל לעזור לך. אם יש פה מישהו שנתקל בזה אולי הוא ידע במה מדובר, אבל אם לא, אני לא מניח שפה תמצא את הישועה.
 
סתם חשבתי...../images/Emo26.gif

שאולי מישהו נתקל בבעיה דומה בעבר עם cin... על-פניו, גם בקוד המקורי לא נראתה שום סיבה טובה שהקוד יעוף בריצה...
 

the another one

New member
אתה בטוח ב 100% שהבעיה

היא ב CIN ??? בדקת שהבעיה היא ב CIN? אם בדקת את התוכנית עם קלט של שורה ריקה, יכול להיות שה CIN שם לך במחרוזת - null ואז הבעיה שלך היא עם ה strcmp שעושה בעיות כשהוא מקבל NULL כמחרוזת...
 

the another one

New member
רגע.... יכול להיות שמצאתי.

יכול להיות שהמחרוזת שלך יותר מדי ארוכה - יותר מ 20 תווים ואתה תכתוב גם לתוך המשתנה אבל גם לאיזורים אסורים בזיכרון... ואז או שתקבל בפלט שטויות או... שתעוף.
 

annefan

New member
האובייקט cin במצב תקין?

אני לא אחזור ואומר שבלי קוד זה לא ילך, אבל לפני יותר משנה כתבתי משהו על cin. אולי זה קשור.
 
זה העניין....../images/Emo26.gif

שבכל ה-if-ים הוא פועל טוב, ורק באחד מהם - הוא נופל... מה עוד, שב-cin הראשון (שמתבצע תמיד) - גם אין לו בעיה. מה שכן - לא הכרתי את המתודה fail... זו התחלה טובה לבדוק שורה קודם אם הוא false (ואם לא - לבדוק מה דפק אותו)... תודה!
 
למעלה