עבור לתוכן

הקצאת מערך עצמים באמצעות malloc

Featured Replies

פורסם

שלום,

האם ניתן להקצות מערך עצמים באמצעות malloc?

בתודה מראש, אור.

פורסם

כמובן. נניח שאתה רוצה להקצות מערך בגודל n, של מבנה מטיפוס mystruct. אז עושים משהו כזה:

mystruct *arr = (mystruct*)malloc(n*sizeof(mystruct));

פורסם

אם בעצמים אתה מתייחס לאובייקטים של C++ ולא סתם לPOD struct, אז תשתמש ב new ולא בmalloc (בכל מקרה עדיף להשתמש ב new אם אתה מתכנת ב C++)

פורסם
  • מחבר

כמובן. נניח שאתה רוצה להקצות מערך בגודל n, של מבנה מטיפוס mystruct. אז עושים משהו כזה:

mystruct *arr = (mystruct*)malloc(n*sizeof(mystruct));

יואב,

הכוונה היא לא ל-Struct אלה לעצם של מחלקה.

והשאלה הזו היא כללית, כמובן שאעדיף להשתמש ב-NEW במצב רגיל.

פורסם

והנה שיפור שנראה טיפשי אבל אחרי שנות נסיון הוא מונע לא מעט באגים:

במקום:


SomeType *p;
SomeType *d;
/* ... */
p = malloc(n * sizeof(SomeType));
/* ... */
memcpy(d, p, sizeof(SomeType) * n);
/* ... */

כדאי לעשות:


SomeType *p;
SomeType *d;
/* ... */
p = malloc(n * sizeof(*p));
/* ... */
memcpy(d, p, sizeof(*d) * n);
/* ... */

מומלץ גם על memset, וכו'.

ככה כאשר מישהו ישנה את SomeType למשהו אחר, הוא לא יצור באג בגלל שהוא שכח לשנות גם את כל שאר המקומות.

תזכרו: תמיד תתכנתו כאילו מי שיתחזק את הקוד שלכם הוא מטורף עם גרזן שיודע איפה אתם גרים.

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

ארכיון

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

דיונים חדשים