سؤال

أنا أستخدم التعليمات البرمجية التالية ...

169: const char *title = Title.c_str();
170: glutCreateWindow(title);

... Valgrind يعطيني ما يلي ...

==28841== Conditional jump or move depends on uninitialised value(s)
==28841==    at 0x6FF7A4C: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x6FF81F7: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x7289B36: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x728A757: _nv000133gl (in /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x4EAB9E9: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EAEA81: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EB1D81: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EA782B: glXCreateNewContext (in /usr/lib64/libGL.so.180.44)
==28841==    by 0x54DF9AA: fgOpenWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x54DE062: fgCreateWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x54DF300: glutCreateWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x4146CE: vimrid::glut::GlutApplication::Init() (GlutApplication.cpp:170)

ولكن ما هو غير مهم؟ يتم تهيئة متغير العنوان مع قيمة العنوان.c_str () والعنوان هو عضو فئة تتم تهيئته في قائمة تهيئة عضو المنشئ ...

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

VimridApplication::VimridApplication() :
    Title("Untitled VimridApplication")
{
    // ...
}

class GlutApplication : public VimridApplication
{
    // ...
}
هل كانت مفيدة؟

المحلول

Valgrind يأتي مع بعض قمع الخطأ الافتراضي، ولكن ربما لا يغطي libclcore.

تكتشف أدوات التحقق من الأخطاء العديد من المشكلات في المكتبات الأساسية، مثل Library GNU C، ومكتبات عميل X11، والتي تأتي مثبتة مسبقا على نظام GNU / Linux الخاص بك. لا يمكنك إصلاح هذه بسهولة، لكنك لا ترغب في رؤية هذه الأخطاء (ونعم، فهناك الكثير!) حتى يقرأ Valgrind قائمة من الأخطاء لقمع بدء التشغيل عند بدء التشغيل. يتم إنشاء ملف إخماد افتراضي بواسطة البرنامج النصي ./configure عند إنشاء النظام.

يمكنك إنشاء الخاصة بك إلقاؤات الخطأ التي تعرف أنها غير ذات صلة في الكود الخاص بك.

نصائح أخرى

فقط تجاهل هذا؛ كما ترون، يتم استخدام القيمة غير المهيمية بالطريقة أسفل التعليمات البرمجية الخاصة بك في مكتبة OpenGL، وربما لا تكون بياناتك غير متجانسة. قد ترغب في حفرها (قد لا تزال موجبة كاذبة)، ولكن قد تتركها وحدك.

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