yonatanph פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 יש פה מיליון שגיאות קומפילציה כי ניסיתי לשחזר מהזכרון בלי להריץ בקומפיילר אבל הפואנטה של השאלה היא לא שגיאת קומפילציה.בקטע הקוד הבא יש שגיאה לוגית. מה היא ואיך פותרים אותה?struct{Int message;Int param;} Message;Q qg;Push(Q* qg, Message* msg)Pop(Q* qg, Message* msg)Foo();Task A(){...pop(&qg, &msg)……}Foo(){Messege Msg;Char* message = "New message";Msg.messege = (int)message;Msg.param= 1;Push(&qg,&Msg);}Task B(){……Foo();……}ורק למקרה שלא היה ברור TASK A ו TASK B הם שתי תהליכים שונים ולא סתם שתי פונקציות. (כלומר שהמטרה פה היא תקשורת בין תהליכים).אפשר להניח שPOP וPUSH כתובים היטב. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 א. בשביל מה יש פורום שפות תכנות? (אל תפתח נושא חדש, פשוט חכה שיעבירו את זה)ב. היה עוזר אם היית רושם מה המטרה של התוכנית, ומה השגיאה שיש לך. קישור לתוכן שתף באתרים אחרים More sharing options...
yonatanph פורסם 2010 ביוני 9 מחבר Share פורסם 2010 ביוני 9 א. בשביל מה יש פורום שפות תכנות? (אל תפתח נושא חדש, פשוט חכה שיעבירו את זה)ב. היה עוזר אם היית רושם מה המטרה של התוכנית, ומה השגיאה שיש לך.א. צודק - התלבלבתי.ב. שאלה מראיון עבודה שהיה לי לפני כמה שבועות - חבר שלי שאל אותי לגבי הראיון ואני מנסה לשחזר את השאלות בשבילו. כמעט בטוח שלא עניתי נכון (לא קיבלתי פידבק על השאלה הזאת לחיוב או לשלילה. לא היה לי פתרון ספציפי אבל הסברתי מה העקרונות שאני עובד לפי הם בחיפוש השגיאה ואת ההנחות והמסקנות שלי.שמעו מה שאמרתי והמשיכו הלאה בלי להגיד כלום, מה שהיה יוצא דופן בראיון). קישור לתוכן שתף באתרים אחרים More sharing options...
sharonbn פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 אוקי אז טאסק איי עושה פופ וטאסק בי עושה פוש בהנחה ש foo מבצעת פוש בצורה נכונה (אני לגמרי לא בטוח שפוינטר תמיד מיוצג ע"י int זה הרי תלוי במרחב בכתובות של הפלטפורמה)בהנחה שהמשתנים מוגדרים כמו שצריך (אין הגדרה לmsg בטאסק איי)נראה לי שאין שום סינכרון בין איי לבי ולכן יש אפשרות שאיי יעשה פופ לתור ריק קישור לתוכן שתף באתרים אחרים More sharing options...
yonatanph פורסם 2010 ביוני 9 מחבר Share פורסם 2010 ביוני 9 יש הנחה שPOP וPUSH כתובים היטב -- כלומר אם יש שגיאה היא לא בתוך POP/PUSH (לעשות POP לתור ריק זה שגיאה בתוך POP).לגבי הCASTING -- מאוד יכול להיות ששם התקלה. אני יותר התמקדתי בעובדה שיש משתנה גלובלי ששתי הTASKים נוגעים בו. קישור לתוכן שתף באתרים אחרים More sharing options...
DOGMA פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 ומה בדיוק הבעיה בזה שיש משתנה גלובאלי? רוב הסיכויים שהוא שם בשביל לסנכרן את 2 המתודות.בכל מקרה אתה בטוח שאתה כותב את השאלה נכון? pop וpush עושים בדיוק אות אותו הדבר, ומה כל הקטע של ה-...? קישור לתוכן שתף באתרים אחרים More sharing options...
yonatanph פורסם 2010 ביוני 9 מחבר Share פורסם 2010 ביוני 9 ה... אומרים שיש עוד שורות קוד.אם הייתי יודע את התשובה לא הייתי שואל כאן... קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 מילא התשובה, לא ברור לי מה השאלה. קישור לתוכן שתף באתרים אחרים More sharing options...
Dubliner פורסם 2010 ביוני 9 Share פורסם 2010 ביוני 9 לדעתי השגיאה היא בהגדרת המשתנה Msg בתוך Foo.בעצם היה צריך ליצור אותו ע"י שימוש באופרטור new, מכיוון שאתה רוצה שהוא יהיה קיים גם מחוץ ל-Foo.בקיצור הקצאת זיכרון דינמית. קישור לתוכן שתף באתרים אחרים More sharing options...
yonatanph פורסם 2010 ביוני 9 מחבר Share פורסם 2010 ביוני 9 לדעתי השגיאה היא בהגדרת המשתנה Msg בתוך Foo.בעצם היה צריך ליצור אותו ע"י שימוש באופרטור new, מכיוון שאתה רוצה שהוא יהיה קיים גם מחוץ ל-Foo.בקיצור הקצאת זיכרון דינמית.לעבודה אין קשר לC++ הכל מתבצע ברמה של C וכל מה שמשתמע מכך.התפקיד הוא כתיבת FIRMWARE לחומרה מסוימת שרצה על גבי מערכת הפעלה RT. לא יודע אם זה תורם משהו להבנת השאלה או לא אבל זה הרקע לשאלה.לגבי ההערה של שניצל : אם תנסה להבהיר לי מה לא ברור אני אנסה להסביר - עד כמה שאני יכול. השאלה מוצגת בדיוק כמו שהוצגה לי עד כמה שהצלחתי לדייק מהזכרון.לא היו הסברים/הבהרות מעבר למה שכבר ציינתי - חלק מהתהליך זה לראות איך אתה מסתדר גם עם משהו חדש/לא מוכר/לא 100% מובן. במהלך התשובה אתה יכול לתאר איזה הנחות הנחת. לי לא קופץ לעין שום דבר. לכן לא הייתה לי תשובה של מה בדיוק לא תקין. לכן תיארתי בתשובה שלי איזה הנחות אני מניח ואיזה בדיקות אני אבצע כדי למצוא את הבעיה. מה שברור (ברור לי לפחות - כלומר שיכול להיות שאני טועה) הוא שהבעיה היא איפשהו במעבר בין הקונטקסטים. ניסיתי לחשוב מתי ואיפה מעבר תהליכים יגרום למידע שעובר בפועל להיות שונה מהמידע שרציתי שיעבור. (כלומר שמה שעבר הוא לא מה שחשבת שעבר).אופציה נוספת שחשבתי עליה היא אולי משהו שקשור לCASTING. אני יודע שCASTING של CHAR ל INT זה דרך אחת לבדוק אם מערכת עובדת ב LITTLE או BIG ENDIAN. אבל לא הצלחתי לחשוב על משהו שיגרום שם לשגיאה.קיויתי שאולי למישהו פה יהיה הערה/הארה שלא חשבתי עליה. קישור לתוכן שתף באתרים אחרים More sharing options...
sharonbn פורסם 2010 ביוני 10 Share פורסם 2010 ביוני 10 קשה לי להבין איך שגיאה בפעולת ה casting תיחשב לבעיה לוגית. זו בעיה טכנית שגם קשורה מאד לפלטפורמה וקומפיילר ספציפיים.אני מגיע מעולם הג'אווה (למרות שכתבתי בC לפני יותר מ10 שנים) ושם יש דגש רב על סינכרוניזציה בין ת'ראדים הניגשים למשאבים משותפים כאשר החלק הטריקי הוא לדעת איפה לשים את הבלוק הסינכרוני. במקרה שלנו אם אין בלוק סינכרוני על פעולות שניגשות לתור, יש מצב שיהיה context switch באמצע פעולת ההכנסה או השליפה והתוכן והסטטוס של התור יהפכו ללא יציבים. קישור לתוכן שתף באתרים אחרים More sharing options...
yonatanph פורסם 2010 ביוני 10 מחבר Share פורסם 2010 ביוני 10 זאת אכן הייתה ההערה הראשונה שלי והתשובה שלהם הייתה שניתן להניח שPOP וPUSH כתובים היטב (הערה שהוספתי לשאלה).אני מניח שאם אף אחד עדיין לא שם לב למשהו בולט כנראה האשם בי - יכול להיות שזכרתי פרט כלשהו מהשאלה לא נכון או בלבלתי שורת קוד כלשהי.תודה בכל זאת על הנסיון. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.