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

ข้อผิดพลาดขณะทำงานที่พบบ่อย

ระบุและป้องกันข้อผิดพลาดเซกเมนเทชัน บัฟเฟอร์ล้น และหน่วยความจำรั่ว

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

ข้อผิดพลาดขณะทำงานที่พบบ่อยในภาษา C

ข้อผิดพลาดขณะทำงานที่พบบ่อยในภาษา C

ข้อผิดพลาดขณะทำงานเกิดขึ้นเมื่อโปรแกรมพบพฤติกรรมที่ไม่คาดคิด ซึ่งมักทำให้โปรแกรมหยุดทำงาน

ในบทเรียนนี้ คุณจะได้เรียนรู้:

  • สาเหตุและวิธีแก้ไขข้อผิดพลาดการแบ่งส่วนหน่วยความจำ
  • วิธีที่บัฟเฟอร์ล้นนำไปสู่ช่องโหว่ด้านความปลอดภัย
  • ผลกระทบของหน่วยความจำรั่วต่อประสิทธิภาพและวิธีหลีกเลี่ยง
ข้อผิดพลาดขณะทำงานที่พบบ่อย — ภาพประกอบ 1

ข้อผิดพลาดการแบ่งส่วนหน่วยความจำคืออะไร

ข้อผิดพลาดการแบ่งส่วนหน่วยความจำคืออะไร

ข้อผิดพลาดการแบ่งส่วนหน่วยความจำเกิดขึ้นเมื่อโปรแกรมพยายามเข้าถึงหน่วยความจำที่ไม่ได้รับอนุญาต

สาเหตุ:

  • การถอดการอ้างอิงพอยน์เตอร์ที่ยังไม่ได้กำหนดค่า หรือพอยน์เตอร์ NULL
  • การเข้าถึงหน่วยความจำนอกขอบเขตของอาร์เรย์
  • การแก้ไขหน่วยความจำแบบอ่านอย่างเดียว

ตัวอย่าง: ข้อผิดพลาดการแบ่งส่วนหน่วยความจำ

ตัวอย่าง: ข้อผิดพลาดการแบ่งส่วนหน่วยความจำ

โปรแกรมนี้ทำให้เกิดข้อผิดพลาดการแบ่งส่วนหน่วยความจำโดยการถอดการอ้างอิงพอยน์เตอร์ NULL

#include <stdio.h>

int main() {
    int *ptr = NULL;
    printf("%d\n", *ptr); // Segmentation fault
    return 0;
}

การป้องกันข้อผิดพลาดการแบ่งส่วนหน่วยความจำ

การป้องกันข้อผิดพลาดการแบ่งส่วนหน่วยความจำ

เคล็ดลับเพื่อหลีกเลี่ยงข้อผิดพลาดการแบ่งส่วนหน่วยความจำ:

  • กำหนดค่าเริ่มต้นให้พอยน์เตอร์ก่อนใช้งานเสมอ
  • ตรวจสอบว่าพอยน์เตอร์เป็น NULL หรือไม่ก่อนถอดการอ้างอิง
  • ตรวจสอบขอบเขตของอาร์เรย์

บัฟเฟอร์ล้นคืออะไร

บัฟเฟอร์ล้นคืออะไร

บัฟเฟอร์ล้นเกิดขึ้นเมื่อข้อมูลมีขนาดเกินพื้นที่หน่วยความจำที่จัดสรรไว้

ตัวอย่าง:

char arr[5]; gets(arr);

ปัญหานี้อาจทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้และช่องโหว่ด้านความปลอดภัย

ตัวอย่าง: บัฟเฟอร์ล้น

ตัวอย่าง: บัฟเฟอร์ล้น

โปรแกรมนี้สาธิตบัฟเฟอร์ล้นโดยใช้ gets()

#include <stdio.h>

int main() {
    char buffer[5];
    printf("Enter a string: ");
    gets(buffer); // Unsafe, may cause buffer overflow
    printf("You entered: %s\n", buffer);
    return 0;
}

การป้องกันบัฟเฟอร์ล้น

การป้องกันบัฟเฟอร์ล้น

หากต้องการป้องกันบัฟเฟอร์ล้น:

  • ใช้ fgets() แทน gets()
  • ตรวจสอบขนาดข้อมูลนำเข้าก่อนเขียนลงอาร์เรย์
  • ใช้ฟังก์ชันที่ปลอดภัยต่อหน่วยความจำ เช่น snprintf()

หน่วยความจำรั่ว

หน่วยความจำรั่ว

หน่วยความจำรั่วเกิดขึ้นเมื่อหน่วยความจำที่จัดสรรไว้ไม่ได้รับการคืน ทำให้สูญเสียพื้นที่หน่วยความจำ

สาเหตุ:

  • ลืมใช้ free() หลังจากใช้ malloc()
  • เขียนทับพอยน์เตอร์โดยไม่คืนหน่วยความจำเดิม

สรุป

สรุป

ในบทเรียนนี้ คุณได้เรียนรู้:

  • สาเหตุและวิธีป้องกันข้อผิดพลาดการแบ่งส่วนหน่วยความจำ
  • วิธีที่บัฟเฟอร์ล้นนำไปสู่ปัญหาด้านความปลอดภัย
  • วิธีที่หน่วยความจำรั่วทำให้ทรัพยากรระบบสูญเปล่า

ถัดไป เราจะสำรวจแนวทางจัดการข้อยกเว้นในภาษา C

ข้อผิดพลาดขณะทำงานที่พบบ่อย — ภาพประกอบ 10

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

บทเรียน “ข้อผิดพลาดขณะทำงานที่พบบ่อย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ข้อผิดพลาดขณะทำงานที่พบบ่อย”

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

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

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

บทเรียน “ข้อผิดพลาดขณะทำงานที่พบบ่อย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การแก้ไขข้อบกพร่องด้วย GDB
  2. ข้อผิดพลาดขณะทำงานที่พบบ่อย
  3. การจัดการข้อยกเว้นใน C
← กลับไปที่ C Academy