האם אתה צריך malloc ב-C++?
האם אתה צריך malloc ב-C++?

וִידֵאוֹ: האם אתה צריך malloc ב-C++?

וִידֵאוֹ: האם אתה צריך malloc ב-C++?
וִידֵאוֹ: Первый стрим за пол года. Отвечаем на важные вопросы! 2024, נוֹבֶמבֶּר
Anonim

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

כמו כן, האם אתה צריך malloc ב-C++?

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

אפשר גם לשאול, מה הטעם במאלוק? ב-C, פונקציית הספרייה malloc משמש להקצאת גוש זיכרון בערימה. התוכנית ניגשת לגוש הזיכרון הזה באמצעות מצביע ש malloc החזרות. כאשר הזיכרון אינו נחוץ יותר, המצביע מועבר ל-free אשר מחלק את הזיכרון כך שניתן יהיה להשתמש בו למטרות אחרות.

באופן זה, האם יש malloc ב-C++?

המאלוק () פונקציה ב C++ מקצה א בלוק של זיכרון לא מאותחל והחזרות א מצביע ריק ל ה בייט ראשון של ה מוקצה בלוק זיכרון אם ה ההקצאה מצליחה. אם ה הגודל הוא אפס, ה הערך המוחזר תלוי ב ה הטמעה של ה סִפְרִיָה. זה יכול להיות או לא א מצביע אפס.

איך מייצרים מבנה?

בשביל מה שאתה רוצה אתה צריך שניים malloc () ש. struct וקטור *y = malloc (גודל של *y); /* שימו לב למצביע */ y->x = calloc(10, sizeof *y->x); בשורה הראשונה, אתה מקצה זיכרון לאובייקט וקטור. malloc () מחזיר מצביע לזיכרון שהוקצה, אז y חייב להיות מצביע וקטור.