0Pricing
C Academy · บทเรียน

การจัดสรรหน่วยความจำแบบไดนามิก

สำรวจฟังก์ชันอย่าง malloc, calloc, realloc และ free สำหรับจัดการหน่วยความจำแบบไดนามิก

การจัดสรรหน่วยความจำแบบไดนามิก เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน

การจัดสรรหน่วยความจำแบบไดนามิก

การจัดสรรหน่วยความจำแบบไดนามิก

ใน C การจัดสรรหน่วยความจำแบบไดนามิกช่วยให้เราจัดสรรหน่วยความจำขณะรันโปรแกรมแทนการจัดสรรในเวลาแปลโปรแกรม

ในบทเรียนนี้ คุณจะได้เรียนรู้สิ่งต่อไปนี้:

  • วิธีจัดสรรหน่วยความจำโดยใช้ malloc, calloc และ realloc
  • วิธีคืนหน่วยความจำที่จัดสรรแล้วโดยใช้ free
  • วิธีหลีกเลี่ยงหน่วยความจำรั่ว
การจัดสรรหน่วยความจำแบบไดนามิก — ภาพประกอบ 1

การจัดสรรหน่วยความจำแบบไดนามิกคืออะไร

การจัดสรรหน่วยความจำแบบไดนามิกคืออะไร

โดยปกติ หน่วยความจำสำหรับตัวแปรจะถูกจัดสรรในเวลาแปลโปรแกรม

การจัดสรรหน่วยความจำแบบไดนามิกจะจัดสรรหน่วยความจำระหว่างการทำงานของโปรแกรมโดยใช้ฟังก์ชันพิเศษ

วิธีนี้มีประโยชน์สำหรับการจัดการอาร์เรย์หรือโครงสร้างที่ไม่ทราบขนาดในเวลาแปลโปรแกรม

การจัดสรรหน่วยความจำด้วย malloc()

การจัดสรรหน่วยความจำด้วย malloc()

ฟังก์ชัน malloc จัดสรรหน่วยความจำแต่จะไม่กำหนดค่าเริ่มต้นให้

รูปแบบคำสั่ง:

ptr = (int*) malloc(size * sizeof(int));

ฟังก์ชันนี้ส่งคืนตัวชี้ไปยังหน่วยความจำที่จัดสรร หรือส่งคืนค่า NULL หากการจัดสรรล้มเหลว

ตัวอย่าง: การใช้ malloc()

ตัวอย่าง: การใช้ malloc()

โปรแกรมนี้สาธิตวิธีจัดสรรหน่วยความจำโดยใช้ malloc

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int*) malloc(5 * sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        ptr[i] = i * 10;
        printf("%d ", ptr[i]);
    }
    free(ptr);
    return 0;
}

การจัดสรรหน่วยความจำด้วย calloc()

การจัดสรรหน่วยความจำด้วย calloc()

ฟังก์ชัน calloc จัดสรรหน่วยความจำและกำหนดค่าเริ่มต้นทั้งหมดเป็นศูนย์

รูปแบบคำสั่ง:

ptr = (int*) calloc(num_elements, sizeof(int));

ฟังก์ชันนี้ส่งคืนตัวชี้ไปยังหน่วยความจำที่จัดสรร หรือส่งคืนค่า NULL หากการจัดสรรล้มเหลว

ตัวอย่าง: การใช้ calloc()

ตัวอย่าง: การใช้ calloc()

โปรแกรมนี้สาธิตวิธีจัดสรรหน่วยความจำโดยใช้ calloc

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int*) calloc(5, sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]); // All elements initialized to 0
    }
    free(ptr);
    return 0;
}

การจัดสรรหน่วยความจำใหม่ด้วย realloc()

การจัดสรรหน่วยความจำใหม่ด้วย realloc()

ฟังก์ชัน realloc เปลี่ยนขนาดของหน่วยความจำที่จัดสรรไว้ก่อนหน้านี้

รูปแบบคำสั่ง:

ptr = realloc(ptr, new_size * sizeof(int));

ฟังก์ชันนี้ส่งคืนตัวชี้ไปยังบล็อกหน่วยความจำใหม่

การคืนหน่วยความจำด้วย free()

การคืนหน่วยความจำด้วย free()

ควรคืนหน่วยความจำที่จัดสรรแล้วโดยใช้ free() เพื่อหลีกเลี่ยงหน่วยความจำรั่ว

รูปแบบคำสั่ง:

free(ptr);

หลังจากคืนหน่วยความจำแล้ว จะต้องไม่เข้าถึงตัวชี้ดังกล่าว

สรุป

สรุป

ในบทเรียนนี้ คุณได้เรียนรู้สิ่งต่อไปนี้:

  • วิธีจัดสรรหน่วยความจำโดยใช้ malloc และ calloc
  • วิธีจัดสรรหน่วยความจำใหม่โดยใช้ realloc
  • วิธีคืนหน่วยความจำโดยใช้ free เพื่อป้องกันหน่วยความจำรั่ว

ถัดไป เราจะสำรวจอาร์เรย์ของตัวชี้และตัวชี้ฟังก์ชันใน C

การจัดสรรหน่วยความจำแบบไดนามิก — ภาพประกอบ 10

คำถามที่พบบ่อย

บทเรียน “การจัดสรรหน่วยความจำแบบไดนามิก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดสรรหน่วยความจำแบบไดนามิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดสรรหน่วยความจำแบบไดนามิก”

สำรวจฟังก์ชันอย่าง malloc, calloc, realloc และ free สำหรับจัดการหน่วยความจำแบบไดนามิก คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “การจัดสรรหน่วยความจำแบบไดนามิก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนะนำพอยน์เตอร์
  2. การจัดสรรหน่วยความจำแบบไดนามิก
  3. อาร์เรย์พอยน์เตอร์และพอยน์เตอร์ฟังก์ชัน
← กลับไปที่ C Academy