
آموزش جامع زبان برنامهنویسی C++ مقدماتی تا پیشرفته [0 تا 100 سی پلاس پلاس بهمراه حل تمرین و پروژه ✅] - تخصیص حافظه پویا در ++C - قسمت 66
در این مقاله قصد داریم تا یکی از کاربردهای مهم و حیاتی پوینترها (Pointers) در زبان برنامهنویسی C++ را مورد بررسی قرار دهیم. این کاربرد تحت عنوان داینامیک مموری الوکیشن (Dynamic Memory Allocation) شناخته میشود.
چالشها و مشکلات آرایهها در C++
فرض کنید که قصد دارید یک آرایه در C++ ایجاد کنید. در این حالت، شما مجبورید در ابتدای کار تعداد خانههای آرایه را مشخص کنید. مثلاً اگر تعداد خانهها را 3 در نظر بگیرید، ولی بعداً نیاز به 4 یا 5 خانه پیدا کنید، با مشکل مواجه میشوید.
این مشکل به این دلیل ایجاد میشود که اندازه آرایهها در زمان کامپایل (Compile Time) مشخص میشود و تغییر آنها در زمان اجرا (Run Time) امکانپذیر نیست.
تخصیص حافظه دینامیک
برای رفع این مشکل، میتوان به صورت دستی حافظهای را در رم (RAM) تخصیص داد (Allocate کرد). این کار با استفاده از پوینترها انجام میشود. برای تخصیص حافظه دینامیک از کلمه کلیدی new
و برای آزادسازی آن از کلمه کلیدی delete
استفاده میشود.
مثال اول: تخصیص و استفاده از یک مقدار
در این مثال، یک عدد را به صورت دینامیک در حافظه تخصیص میدهیم و آن را نمایش میدهیم:
#include
using namespace std;
int main() {
int *p = new int; // تخصیص حافظه دینامیک
*p = 10; // مقداردهی به حافظه تخصیص داده شده
cout << "Value: " << *p << endl; // نمایش مقدار
delete p; // آزادسازی حافظه
return 0;
}
در این کد، ابتدا یک حافظه به اندازه یک عدد صحیح (int) تخصیص داده شده و سپس مقدار 10 در آن ذخیره میشود. در نهایت، حافظه تخصیص داده شده آزاد میشود.
مثال دوم: تخصیص حافظه به صورت آرایه
در این مثال، یک آرایه با اندازه دلخواه به صورت دینامیک تخصیص داده میشود و مقادیر آن نمایش داده میشود:
#include
using namespace std;
int main() {
int size = 5;
int *arr = new int[size]; // تخصیص حافظه به صورت آرایه
for(int i = 0; i < size; ++i) {
arr[i] = i * 2; // مقداردهی به آرایه
}
for(int i = 0; i < size; ++i) {
cout << "Value at index " << i << ": " << arr[i] << endl; // نمایش مقادیر آرایه
}
delete[] arr; // آزادسازی حافظه آرایه
return 0;
}
در این کد، ابتدا یک آرایه به اندازه 5 عدد صحیح به صورت دینامیک تخصیص داده شده و سپس به آن مقادیر داده میشود. در نهایت، حافظه آرایه آزاد میشود.
جلوگیری از رخنه حافظه (Memory Leak)
اگر حافظهای که به صورت دینامیک تخصیص داده شده است، آزاد نشود، ممکن است به مشکل رخنه حافظه (Memory Leak) برخورد کنیم. این مشکل زمانی رخ میدهد که برنامه حافظهای را اشغال کرده و دیگر به آن دسترسی نداشته باشد، اما حافظه همچنان در رم اشغال باقی میماند. برای جلوگیری از این مشکل، باید همیشه پس از پایان استفاده از حافظه دینامیک، آن را آزاد کنیم.
مثال سوم: تخصیص و آزادسازی حافظه به صورت صحیح
#include
using namespace std;
int main() {
int *ptr = new int[10]; // تخصیص حافظه برای یک آرایه
// استفاده از آرایه
delete[] ptr; // آزادسازی حافظه آرایه
return 0;
}
در این مثال، پس از تخصیص حافظه برای یک آرایه، حافظه به درستی آزاد شده تا از بروز رخنه حافظه جلوگیری شود.
نتیجهگیری
تخصیص حافظه دینامیک یکی از قابلیتهای بسیار قدرتمند زبان C++ است که با استفاده از آن میتوان بر محدودیتهای آرایهها در زمان کامپایل غلبه کرد. این قابلیت به برنامهنویسان امکان میدهد تا به صورت بهینه از حافظه استفاده کرده و برنامههای پویاتری بنویسند. با این حال، توجه به آزادسازی صحیح حافظه پس از استفاده از آن برای جلوگیری از بروز رخنه حافظه ضروری است.
منابع خارجی مرتبط با موضوع
ادامه دوره (قسمت 67)
در قسمت بعدی به تفاوت آرایه و اشارهگر خواهیم پرداخت. اگر سوالی دارید، در بخش دیدگاه مطرح کنید. همچنین ممنون میشم با حمایت دلنشینتون از من و دورهها حمایت کنید.
در این قسمت از دوره آموزشی C++ به بررسی عملگر دی رفرنس (Dereference Operator) میپردازیم. در ابتدا با ...
در این بخش از دوره آموزشی زبان C++، به بررسی ارتباط و شباهتهای بین آرایهها و پوینترها میپردازیم. این مفاهیم اساسی برای درک بهتر...
تخصیص حافظه پویا در ++C
حق کپی ویدئو مجاز نمیباشد
قسمت:
جلسه شصت و شش
نام دوره:
آموزش جامع ++C
زمان ویدئو:
12 دقیقه
مدرس:
مهدی کاظمی
در این قسمت یادخواهید گرفت:
در این مقاله قصد داریم تا یکی از کاربردهای مهم و حیاتی پوینترها (Pointers) در زبان برنامهنویسی C++ را مورد بررسی قرار دهیم. این کاربرد تحت عنوان داینامیک مموری الوکیشن (Dynamic Memory Allocation) شناخته میشود.
