עבור לתוכן

הפונקציה realloc בC

Featured Replies

פורסם
  • מחבר

נסיתי, עכשיו התבלבלתי עוד יותר.

מבחינה תחבירית זה נראה לי הכי נכון שאפשר, אולי בגלל זה אני לא מצליח להבין..

אולי תגלה לי את הפיתרון? מה לא היה נכון שם? ::)

פורסם

אתה מנסה לעשות משהו כזה (זה די דומה לקוד שלך, פישטתי אותו והורדתי את הקטע של הפונקציות):

Monom *a = (Monom*)malloc(sizeof(Monom)*10);
Monom **b = &a;

שים לב שהטיפוס של a הוא מצביע ל-Monom, והטיפוס של b הוא מצביע למצביע (ל-Monom). להזכירך, מצביע == מערך, כלומר אם a הוא מצביע ל-Monom אז הוא גם משמש כמערך של Monom, ו-b, שהוא מצביע למצביע, משמש כמערך של מצביעים.

כשאתה מנסה לעשות [b[j אז זה בעצם שקול ל-(b+j)*, כלומר "גש למקום ה-j במערך b". אבל b הוא לא באמת מערך! הוא סתם מצביע למקום כלשהו בזכרון (ליתר דיוק, המקום בו יושב המשתנה a). תאר לך לדוגמה שהמערך שנוצר באמצעות ה-malloc יושב במקום 1000. כלומר, a מכיל את הערך 1000, וכשאתה עושה [a[j אז אתה בעצם ניגש למקום 1000+(j*sizeof(Monom בזכרון. נניח כעת שהמשתנה a יושב במקום 20000 בזכרון. אז b מכיל את הערך 20000, וכשאתה עושה [b[j אז אתה מנסה לגשת למקום 20000+(*j*sizeof(int, שהוא חסר משמעות.

פורסם
  • מחבר

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

פורסם

בחץ משתמשים כשיש לך מצביע ל-struct, ואך ורק במקרה הזה. לא משתמשים בו כשיש לך מערך של struct.

ארכיון

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

דיונים חדשים