เหตุใดฉันจึงได้รับข้อผิดพลาดในการแบ่งส่วนในโค้ดของฉัน

เมื่อฉันคอมไพล์โค้ดด้วย GCC แล้วรันมัน เมื่อฉันเรียกใช้ฟังก์ชันของฉันในโค้ด มันจะพิมพ์ออกมา: "Segmentation Fault (core dumped)"

ฉันลองค้นหาวิธีแก้ไขใน Google

นี่คือรหัสปัจจุบันของฉัน:

char ** saveLevelPositions() {
  int x, y;
  char ** positions;
  positions = malloc(sizeof(char *) * 25);

  for (y = 0; y < 25; y++) {
    positions[y] = malloc(sizeof(char) * 100);

    for (x = 0; x < 100; x++) {
      positions[x][y] = mvinch(y, x);
    }
  }

  return positions;
}

ฉันคาดว่าฟังก์ชันจะทำงานได้อย่างถูกต้องและทำให้เกิดข้อผิดพลาดในการแบ่งส่วน

แก้ไข: สำหรับบริบทเล็กน้อย นี่คือลิงก์ไปยังโครงการ GitHub: https://github.com/xslendix/rogue


person xSlendiX Gaming    schedule 05.04.2019    source แหล่งที่มา
comment
นั่นไม่ใช่วิธีแก้ปัญหาที่ถูกต้อง น่าเศร้า ฉันลองแล้วและพบปัญหาเดียวกัน   -  person xSlendiX Gaming    schedule 05.04.2019
comment
มันเป็นส่วนที่ถูกต้องของการแก้ปัญหาอย่างแน่นอน หากคุณยังคงประสบปัญหาแสดงว่าไม่อยู่ในรหัสที่โพสต์ (mvinch)?   -  person Eugene Sh.    schedule 05.04.2019
comment
ยังคงปัญหาเดิม...   -  person xSlendiX Gaming    schedule 05.04.2019
comment
@ยูจีนช. mvinch เป็นฟังก์ชันในตัวของ curses.h   -  person xSlendiX Gaming    schedule 05.04.2019
comment
ดูวิธีสร้างตัวอย่างขั้นต่ำ สมบูรณ์ และตรวจสอบได้ นอกจากนี้ดีบักเกอร์อาจช่วยได้บ้าง   -  person sjsam    schedule 05.04.2019
comment
ในโค้ดของคุณบน github ฉันเห็น Room ** rooms; rooms = malloc(sizeof(Room) * 2); - นี่ผิดอย่างแน่นอน เหตุใด rooms จึงเป็นตัวชี้คู่ ฉันไม่ได้ดูเพิ่มเติม แต่ฉันคิดว่าอาจมีปัญหาอื่น ๆ   -  person Eugene Sh.    schedule 05.04.2019


คำตอบ (1)


ตามคำตอบและความคิดเห็นอื่นๆ ที่ระบุไว้ คุณควรสลับการใช้ x และ y ดังนั้น
positions[x][y] ควรเป็น positions[y][x]

นอกจากนี้ คุณไม่ได้ใช้ประเภทที่ถูกต้องในการจัดเก็บผลลัพธ์ของ mvinch ใน curses.h มันบอกว่า:

typedef unsigned long chtype;

ดังนั้นคุณควรจัดสรรหน่วยความจำดังนี้

chtype ** positions;
positions = malloc(sizeof(chtype *) * 25);
positions[y] = malloc(sizeof(chtype) * 100);

และเปิดคำเตือนของคอมไพเลอร์ของคุณ เนื่องจากคอมไพเลอร์ควรตั้งค่าสถานะข้อผิดพลาดนี้

person Paul Ogilvie    schedule 05.04.2019