שאלה בשפת c

חן119

New member
שאלה בשפת c

שלום,
ניסיתי לפתור את שאלה 3 (צירפתי אותה בקובץ ppt, למרות שלא כ"כ קריטי לקרוא אותה)

הבעיה שלי היא בפונקציה AddNewItem (שמטרתה להוסיף את הנתונים החדשים שהיא מקבלת (a ו b ) למבנה חדש מסוג Item ולמקום הנכון (שנתון לה במשתנה n) ברשימה המקושרת

אני לא מצליחה להבין למה אני מקבלת את הודעת השגיאה שאני מקבלת (ולמען האמת אני לא בטוחה למה ההודעה מכוונת)

אשמח אם מישהו יוכל טיפה לעזור לי
 

חן119

New member
וגם עוד שאלה בבקשה:

איך אני יודעת אם שיחררתי את כל הזיכרון כמו שצריך בסוף התוכנית?
כמו לדוגמא בפוקנצייה שכתבתי בפיתרון שצירפתי למעלה: Delete_List שבה רציתי למחוק את כל הרשימה המקושרת בסוף השימוש?
האם יש איזשהי דרך (דומה למה שעושים עם הדיבגר) כדי לראות/לוודא שכל הזיכרון שוחרר?
 

עדין ר

New member
את יכולה לכתוב פונקציות

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

חן119

New member
אהה יפה...הבנתי לאן אתה חותר עם זה! אנסה את

זה תודה!
 

עדין ר

New member
לא כתבת מה הודעת השגיאה

אבל מה שכן, נראה שיש לך בעיה בהגדרה של temp. הגדרת אותו כמצביע למצביע, והערך שלו בעצם לא משתנה מרגע שאתחלת אותו. לכן בדיקות בלולאה שמשוות אותו ל-head ו-tail לא נראות הגיוניות כ"כ. כמו כן, כשאת מקדמת את הערך עליו מצביע temp, את בעצם מקדמת את ראש הרשימה, וזה כנראה לא מה שרצית.

האמת שלא כ"כ ברור למה הגדרת את temp כמצביע למצביע, ולא סתם מצביע.
 

חן119

New member
פשוט אלה היו הדרישות של המרצה, גם אני מעדיפה

לא לעבוד עם מצביע כפול אם יש לי אפשרות אחרת.
אוקי אני מבינה את הטעות עכשיו...תודה על עזרתך!
 
למעלה