פורסם 2007 באוקטובר 1118 שנים נגיד ש CClist הוא מערך דינמי שהוא שדה במבנהאיך אני מגדיל אותו כל פעם באחד יותר?זה מה שניסיתי וזה לא עושה כלום: n=((sizeof(Student->CClist)/sizeof((Student->CClist)[0]))); (Student->CClist)=realloc(Student->CClist,sizeof(ElementType)*(n+1)); if(!Student->CClist){perror("Not enough memory!");exit(5);}
פורסם 2007 באוקטובר 1118 שנים מה השגיאה שאתה מקבל? זה מחזיר לך תמיד NULL?תשמור את מספר האיברים במקום נפרד, ואל תבצע את החלוקה הזו.
פורסם 2007 באוקטובר 1118 שנים מחבר החלוקה הזאת זה הדרך היחידה שלי לדעת את מספר האיברים.אם אני עובר על זה בלולאת while בפעם הראשונה הn הוא 1 כי עשיתי לפני כן שהמערך יצביע על NULL (בשביל הריאלוק) - עד פה הכל תקיןאבל הקטע שגם בפעם השניה (אחרי שריאלוק מגדיל את המערך (ל2) ) הn עדיין שווה ל1 וכן הלאה...אין שגיאות.[br]פורסם בתאריך: 11.10.2007 בשעה 19:22:27אני אסביר יותר טוב:נגיד אני שם את הקטע קוד הזה ה-n בשורה הראשונה שווה ל-1 (תקין - כי המערך מצביע לNULL)הבעיה שגם בשורה האחרונה הוא עדיין שווה לאחד למרות שהמערך גדל ואמור להיות שווה לn+1 שזה 2 n=((sizeof(Student->CClist)/sizeof((Student->CClist)[0]))); Student->CClist=(ElementType*)realloc(Student->CClist,sizeof(ElementType)*(n+1)); if(!Student->CClist){perror("Not enough memory!");exit(5);} n=((sizeof(Student->CClist)/sizeof((Student->CClist)[0])));
פורסם 2007 באוקטובר 1118 שנים אהם,sizeof (student->CClist)יחזיר לך בדיוק 4.זה לא מערך, ולא struct. זה מצביע.תצטרך להחזיק את הגודל שלו במשתנה נפרד.אגב (למרות שיש סיכוי מסוים שזה בכלל לא קשור לתרגיל שלך), להקצות כל פעם מקום לעוד איבר אחד זה ממש לא יעיל.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.