خطأ تجزئة باستخدام SDL مع C++ ، في محاولة Blit الصور

StackOverflow https://stackoverflow.com/questions/341192

  •  19-08-2019
  •  | 
  •  

سؤال

حسنا - لقد مثيرة للاهتمام هنا.أنا أعمل على استنساخ تتريس (أساسا إلى "مستوى أعلى" مهاراتي).كنت أحاول أن ريفاكتور قانون بلدي للحصول عليه المستخرجة الطريقة التي أردت ذلك.بينما كان يعمل على ما يرام قبل الآن أحصل على خطأ تجزئة قبل أي الصور التي يمكن blitted.لقد حاولت تصحيح ذلك دون جدوى.

لقد نشرت بي إس تعمل نسخة من المشروع هنا.

انها مجرد مشروع صغير و شخص أكثر معرفة مني و المصحح المحتمل معرفة ذلك في لمح البصر.فقط التبعية هو SDL.مجد الشخص الذي يستطيع أن يقول لي ما أفعله خطأ.

تحرير:بقدر ما أستطيع أن أقول ما لدي الآن و ما كان قبل منطقيا نفسه ، لذلك أنا لا أعتقد أن ما لدي الآن من شأنه أن يسبب خطأ تجزئة.فقط تشغيل إس تعود على العامل نسخ أو إعادة ترجمة و يمكنك أن ترى أنه كان يعمل...

هل كانت مفيدة؟

المحلول

أنظر إلى سطر 15 إلى 18 من Surface.cpp:

    surface = SDL_DisplayFormatAlpha( tempSurface );
    surface = tempSurface;
}
SDL_FreeSurface( tempSurface );

أفترض أنه segfaults لأن عند استخدام هذا السطح في وقت لاحق ، هي في الواقع تعمل على tempSurface بسبب هذا السطر:

surface = tempSurface;

وليس سطح عاد قبل SDL_DisplayFormatAlpha().منذ مجانا tempSurface السطح الآن لافتا إلى ذاكرة غير صالحة.لإصلاح, ببساطة إزالة السطر الثاني في آخر كتلة.

نصائح أخرى

ليس لدي SDL المثبتة على الجهاز الخاص بي ، ولكن بعد النظر من خلال التعليمات البرمجية.

لقد لاحظت هذا في Output.cpp ملف:

display = new Surface();

كنت لا تفعل شيئا.منشئ هذا فارغا.(السطح لم يتم تهيئة).

ثم في الإخراج::initalize() تفعل:

display->surface = SDL_SetVideoMode( 800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );

هذا يبدو وكأنه مسألة السطح::السطح لم يكن في الواقع تهيئة.إذا لم تكن قد وجدت الحل عندما أحصل على المنزل سوف يسو في ذلك.

بقدر ما أفهم ، تجزئة خطأ يحدث عندما تحاول mnaipulate على ponter التي لم تعد متاحة ، أو تحاول تغيير ثابت القيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top