ในบทก่อนหน้าของบทเรียนนี้
คุณได้เห็นแล้วว่าหน่วยความจำต้องถูกจองก่อนสำหรับตัวแปร
ก่อนที่โปรแกรมจะรัน ในบางกรณี
เราอาจจะต้องการจองหน่วยความจำแบบไดนามิกส์ในเวลาที่โปรแกรมรัน
ในบท นี้ การจองหน่วยความจำแบบไดนามิส์ ในภาษา C++ นั้นให้เราสามารถจัดการกับหน่วยความจำได้ในเวลาที่โปรแกรมทำงาน เช่น การจองหน่วยความจำ และการคืนหน่วยความจำให้กับระบบ
มาดูตัวอย่างกับการใช้การจองหน่วยความจำแบบไดนามิก
ในบท นี้ การจองหน่วยความจำแบบไดนามิส์ ในภาษา C++ นั้นให้เราสามารถจัดการกับหน่วยความจำได้ในเวลาที่โปรแกรมทำงาน เช่น การจองหน่วยความจำ และการคืนหน่วยความจำให้กับระบบ
Operators new and new[]
เราสามารถจัดสรรหน่วยความจำแบบไดนามิกโดยการใช้คำสั่งnew
สำหรับตัวแปรปกติ และ new[]
สำหรับอาเรย์ นี่จะส่งค่าพอยน์เตอร์ที่พอยน์เตอร์ชี้ไปยังตำแหน่งเริ่มต้นของตัวแปร คุณสามารถทำตามรูปแบบของมันได้ดังนี้:int * mypointer; mypointer = new int [5];ในตัวอย่าง การจัดสรรหน่วยความจำแบบไดนามิกสำหรับตัวแปรแบบ integer 5 ตัวแปร ตอนแรกเราประกาศ mypointer ซึ่งประเภทของมันต้องตรงกันกับค่าของข้อมูลที่เราจะจัดสรรหน่วยความจำให้,
int
อันที่สองเราใช้คำสั่งnew
เพื่อจัดสรรหน่วยความจำที่มีขนาด 5 และใส่ขนาดภายในวงเล็บ[]
ซึ่งสามารถเป็นจำนวนเต็มบวก หลังจากนั้นพอยน์เตอร์จะชี้ไปยังตำแหน่งแรกของหน่วยความจำที่ได้จองไว้แล้วOperators delete and delete[]
โดย ปกติ โปรแกรมจะคืนค่าหน่วยความจำให้ระบบหลังจากที่โปรแกรมสิ้นสุดการทำงานอย่าง สมบูรณ์ แต่บางครั้งเราได้เสร็จสิ้นงานของเราขณะเดียวกันโปรแกรมยังไม่จบ เราสามารถคืนค่าหน่วยความจำที่เราได้จองไว้โดยการใช้คำสั่งdelete
:delete mypointer; delete[] mypointer;บรร ทักแรกเราคืนค่าหน่วยความจำสำหรับตัวแปร และบรรทัดที่สองสำหรับอาเรย์ หลังจากนั้นหน่วยความจำจะคืนสู่ระบบและสามารถนำไปใช้อย่างอื่นได้
มาดูตัวอย่างกับการใช้การจองหน่วยความจำแบบไดนามิก
#include <iostream> #include <new> using namespace std; int main () { int i,n; int * p; cout << "How much memory would you like to allocate? "; cin >> n; p= new (nothrow) int[n]; if (p == NULL) cout << "Error: memory could not be allocated"; else { for (i = 0; i < n; i++) { cout << "Enter p[" << i << "]: "; cin >> p[i]; } cout << "You have entered: "; for (i = 0; i < n; i++) cout << p[i] << ", "; delete[] p; } return 0; }
Output
How much memory would you like to allocate? 5 Enter number for p[0]: 1 Enter number for p[1]: 2 Enter number for p[2]: 3 Enter number for p[3]: 4 Enter number for p[4]: 5 You have entered: 1, 2, 3, 4, 5,ใน ตัวอย่างนี้ เราได้เขียนโปรมแบบไดนามิกที่จะถามถึงขนาดที่เราต้องการสร้าง หลังจากนั้นเราจะจองหน่วยความจำแบบไดนามิกกับขนาดที่ใส่เข้ามา หน่วยความจำแบบไดนามิกนั้นเหมือนอาเรย์ ซึ่งมันเป็นลำดับของหน่วยความจำ เมื่อเราเสร็จสิ้นงานของเรา เราจะคืนค่าหน่วยความจำที่เราได้จองไว้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น