הגדלת מערך דינמי במבנה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


orninyo

Recommended Posts

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

קישור לתוכן
שתף באתרים אחרים

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

אם אני עובר על זה בלולאת 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. זה מצביע.

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...