ข้อผิดพลาดของหน่วยความจำโดยใช้ OpenGL glTexImage2D

ฉันได้ติดตามบทช่วยสอนนี้เกี่ยวกับ OpenGL และ C++: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06

...และฉันก็พบว่าตัวเองกำลังเผชิญกับข้อผิดพลาดค่อนข้างมาก เมื่อใดก็ตามที่ฉันพยายามคอมไพล์ โปรแกรมของฉันหยุดทำงานโดยมีข้อผิดพลาดประเภท System.AccessViolationException ฉันได้แยกปัญหาให้อยู่ในฟังก์ชันนี้แล้ว:

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

ในกรณีที่คุณไม่ต้องการดูบทช่วยสอนนั้น ดูเหมือนว่าหน่วยความจำจะถูกตั้งค่าไว้ดังนี้:

AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);

ความช่วยเหลือใด ๆ จะยอดเยี่ยม ขอบคุณ.


person Jamie    schedule 14.11.2010    source แหล่งที่มา


คำตอบ (2)


คุณกำลังหยุดทำงานเนื่องจาก TextureImage[0] เป็น NULL memset เริ่มต้นมีการตั้งค่าเป็น NULL; หากคุณทำตามในบทช่วยสอน บรรทัดถัดไปของโค้ดจะเป็นดังนี้:

if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))

โปรดสังเกตอย่างระมัดระวังว่ามีเครื่องหมาย single = ที่นี่ ไม่ใช่ == สองเท่าอย่างที่คุณเห็นตามปกติ (คุณอาจได้รับคำเตือนจากคอมไพเลอร์ที่นี่ หากต้องการระงับ ให้เพิ่มวงเล็บเพิ่มเติมรอบๆ งาน)) . ตรวจสอบให้แน่ใจว่าคุณได้คัดลอกบรรทัดโค้ดนี้อย่างถูกต้อง และคุณมี = เพียงตัวเดียวที่นี่

หากในความเป็นจริง คุณมี = ตัวเดียว ให้ตรวจสอบเพื่อให้แน่ใจว่า LoadBMP ส่งกลับค่าที่ไม่ใช่ NULL หากส่งคืนค่า NULL สาเหตุที่เป็นไปได้มากที่สุดคือไม่พบไฟล์บิตแมป Data/NeHe.bmp เนื่องจากไม่มีอยู่หรือค้นหาไฟล์ในไดเรกทอรีที่ไม่ถูกต้อง ตรวจสอบให้แน่ใจว่าไดเร็กทอรีการทำงานปัจจุบันของคุณได้รับการตั้งค่าอย่างถูกต้องเพื่อให้สามารถค้นหารูปภาพได้

person Adam Rosenfield    schedule 14.11.2010
comment
ดีกว่าวงเล็บเพิ่มเติมจะเป็นการเปรียบเทียบที่ชัดเจน ชอบ if (NULL != (TextureImage[0] = LoadBMP("Data/NeHe.bmp"))) { ... } - person Ben Voigt; 14.11.2010
comment
ดูเหมือนจะไม่ส่งคืน NULL เนื่องจากฉันทดสอบค่าที่ไม่ใช่ NULL และดูเหมือนว่าจะผ่านการทดสอบและยังคงขัดข้อง การตั้งค่าไดเร็กทอรีการทำงานอย่างถูกต้องต้องทำอย่างไร? ฉันใช้ Visual Studio 2010 ถ้ามันช่วยได้ - person Jamie; 14.11.2010

ปรากฎว่าบิตแมปที่ฉันพยายามโหลดมีขนาดใหญ่เกินไป ฉันย่อขนาดให้เหลือ 256x256px และทำงานได้อย่างสมบูรณ์แบบ

person Jamie    schedule 14.11.2010