עבור לתוכן

הגדלת מערך דינמי במבנה

Featured Replies

פורסם

נגיד ש 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);}

פורסם

מה השגיאה שאתה מקבל? זה מחזיר לך תמיד NULL?

תשמור את מספר האיברים במקום נפרד, ואל תבצע את החלוקה הזו.

פורסם
  • מחבר

החלוקה הזאת זה הדרך היחידה שלי לדעת את מספר האיברים.

אם אני עובר על זה בלולאת 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])));

פורסם

אהם,

sizeof (student->CClist)

יחזיר לך בדיוק 4.

זה לא מערך, ולא struct. זה מצביע.

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

אגב (למרות שיש סיכוי מסוים שזה בכלל לא קשור לתרגיל שלך), להקצות כל פעם מקום לעוד איבר אחד זה ממש לא יעיל.

פורסם
  • מחבר

הבנתי תודה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים