Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 损坏的双链接列表错误_C++_Qt_Constructor_Datamember - Fatal编程技术网

C++ 损坏的双链接列表错误

C++ 损坏的双链接列表错误,c++,qt,constructor,datamember,C++,Qt,Constructor,Datamember,我正在开发一个制作物理动画的Qt/OpenGL gui。我尝试使用mousePressEvent和mouseMoveEvent函数进行旋转 为此,我尝试为鼠标位置添加QPoint lasPos数据成员。但我不知道为什么在执行时会出现以下错误: *** glibc detected *** ./YourGalaxy: corrupted double-linked list: 0x0000000001682a00 *** ======= Backtrace: ========= /lib/libc

我正在开发一个制作物理动画的Qt/OpenGL gui。我尝试使用
mousePressEvent
mouseMoveEvent
函数进行旋转

为此,我尝试为鼠标位置添加
QPoint lasPos
数据成员。但我不知道为什么在执行时会出现以下错误:

*** glibc detected *** ./YourGalaxy: corrupted double-linked list: 0x0000000001682a00 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71bd6)[0x7f665940ebd6]
...
以下是GLWidget.hpp:

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLShaderProgram>
#include <QGLWidget>
#include <QPoint>
#include <QTimer>
#include "NBody.hpp"
#include "Timer.h"

 class GLWidget : public QGLWidget
 {
     Q_OBJECT

 public:

     GLWidget(QWidget *parent = NULL);

     ~GLWidget();

     NBody *Galaxy;
     float m_particleRadius;
     float m_pointScale;
     QPoint lastPos;
     GLubyte *textureImage;
     GLuint texture;
     Timer timer;
     GLuint m_program;
     QTimer *m_timer;
     int count;
     double n_fps;

     GLuint _compileProgram(const char *source);
     void LoadGLTextures();
     void createVBO(uint size);
     void draw();
     void printStats();
     void zoom_scale(double factor);

 protected :

     void initializeGL();
     void mousePressEvent(QMouseEvent *event);
     void mouseMoveEvent(QMouseEvent *event);

 private slots:

     void processCurrent();

 private:

     int w_width;
     int w_height;
     GLfloat g_nearPlane;
     GLfloat g_farPlane;
     char** stats;

 };

 #endif
编辑2:以下是绘图功能:

 void GLWidget::draw()
{
   glClearColor(0.0 ,0.0, 0.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    if (Galaxy->isFirstLaunch)
        {
        glViewport(0, 0, w_width, w_height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0f, (float)w_width / w_height, g_nearPlane, g_farPlane);
        glMatrixMode(GL_MODELVIEW);
        gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glScalef(0.03f, 0.03f, 0.03f);
    }
    glEnable(GL_POINT_SPRITE);
    glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);

    glEnable(GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE);    

        glUseProgram(m_program);
        glUniform1f( glGetUniformLocation(m_program, "pointRadius"), m_particleRadius );
        glUniform1f( glGetUniformLocation(m_program, "pointScale"),m_pointScale);  

        GLuint vbo_disk;

        glBindBuffer(GL_ARRAY_BUFFER, vbo_disk);
        glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), Galaxy->pos);
        glEnableClientState(GL_VERTEX_ARRAY);

        glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
        glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_disk());

       glBindBuffer(GL_ARRAY_BUFFER, 0);
        glDisableClientState(GL_VERTEX_ARRAY);

    GLuint vbo_halo;

        glBindBuffer(GL_ARRAY_BUFFER, vbo_halo);
        glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), &Galaxy->pos[Galaxy->getNumParticles_disk()]);
        glEnableClientState(GL_VERTEX_ARRAY);

        glColor4f(0.0f, 0.0f, 1.0f, 0.2f);
        glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_halo());

        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glDisableClientState(GL_VERTEX_ARRAY); 

        glDisable(GL_BLEND);        
    glDisable(GL_POINT_SPRITE);
}

回溯应该告诉您错误发生在代码中的什么地方。回溯表明错误发生在
GLWidget::draw()
中。向我们展示此代码可能有助于我们诊断问题。抱歉,修改GLWidget.hpp时,Makefile出现了一个无法正常工作的问题。这就是答案!这个问题似乎离题了,因为它太本地化了,而且问题与代码无关。
(gdb) bt
#0  0x00007ffff53501b5 in raise () from /lib/libc.so.6
#1  0x00007ffff5352fc0 in abort () from /lib/libc.so.6
#2  0x00007ffff538637b in ?? () from /lib/libc.so.6
#3  0x00007ffff538fbd6 in ?? () from /lib/libc.so.6
#4  0x00007ffff539004d in ?? () from /lib/libc.so.6
#5  0x00007ffff5392354 in ?? () from /lib/libc.so.6
#6  0x00007ffff5394a30 in malloc () from /lib/libc.so.6
#7  0x00007fffee75edec in ?? () from /usr/lib/dri/fglrx_dri.so
#8  0x00007fffee876c2f in ?? () from /usr/lib/dri/fglrx_dri.so
#9  0x00007fffee8e4e2b in ?? () from /usr/lib/dri/fglrx_dri.so
#10 0x00007fffee8e5436 in ?? () from /usr/lib/dri/fglrx_dri.so
#11 0x00007fffee879ff2 in ?? () from /usr/lib/dri/fglrx_dri.so
#12 0x00007fffee87cf94 in ?? () from /usr/lib/dri/fglrx_dri.so
#13 0x00007fffee87d0d6 in ?? () from /usr/lib/dri/fglrx_dri.so
#14 0x00007fffee614610 in ?? () from /usr/lib/dri/fglrx_dri.so
#15 0x00007fffee620783 in ?? () from /usr/lib/dri/fglrx_dri.so
#16 0x00007fffee621477 in ?? () from /usr/lib/dri/fglrx_dri.so
#17 0x00007fffee621825 in ?? () from /usr/lib/dri/fglrx_dri.so
#18 0x00007fffed98d07e in ?? () from /usr/lib/dri/fglrx_dri.so
#19 0x0000000000409164 in GLWidget::draw() ()
#20 0x0000000000409d15 in GLWidget::processCurrent() ()
#21 0x00000000004209b0 in GLWidget::qt_metacall(QMetaObject::Call, int, void**) ()
#22 0x00007ffff6d9e1f7 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#23 0x00007ffff6d97889 in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4
#24 0x00007ffff72bf4ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#25 0x00007ffff72c5e4d in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#26 0x00007ffff6d864fc in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#27 0x00007ffff6db588e in ?? () from /usr/lib/libQtCore.so.4
#28 0x00007ffff6db28f4 in ?? () from /usr/lib/libQtCore.so.4
#29 0x00007ffff47bd6f2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#30 0x00007ffff47c1568 in ?? () from /lib/libglib-2.0.so.0
#31 0x00007ffff47c171c in g_main_context_iteration () from /lib/libglib-2.0.so.0
#32 0x00007ffff6db25e3 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#33 0x00007ffff73721fe in ?? () from /usr/lib/libQtGui.so.4
#34 0x00007ffff6d85222 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#35 0x00007ffff6d8560c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#36 0x00007ffff6d896db in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#37 0x000000000040b311 in main ()
 void GLWidget::draw()
{
   glClearColor(0.0 ,0.0, 0.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    if (Galaxy->isFirstLaunch)
        {
        glViewport(0, 0, w_width, w_height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0f, (float)w_width / w_height, g_nearPlane, g_farPlane);
        glMatrixMode(GL_MODELVIEW);
        gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glScalef(0.03f, 0.03f, 0.03f);
    }
    glEnable(GL_POINT_SPRITE);
    glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);

    glEnable(GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE);    

        glUseProgram(m_program);
        glUniform1f( glGetUniformLocation(m_program, "pointRadius"), m_particleRadius );
        glUniform1f( glGetUniformLocation(m_program, "pointScale"),m_pointScale);  

        GLuint vbo_disk;

        glBindBuffer(GL_ARRAY_BUFFER, vbo_disk);
        glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), Galaxy->pos);
        glEnableClientState(GL_VERTEX_ARRAY);

        glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
        glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_disk());

       glBindBuffer(GL_ARRAY_BUFFER, 0);
        glDisableClientState(GL_VERTEX_ARRAY);

    GLuint vbo_halo;

        glBindBuffer(GL_ARRAY_BUFFER, vbo_halo);
        glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), &Galaxy->pos[Galaxy->getNumParticles_disk()]);
        glEnableClientState(GL_VERTEX_ARRAY);

        glColor4f(0.0f, 0.0f, 1.0f, 0.2f);
        glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_halo());

        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glDisableClientState(GL_VERTEX_ARRAY); 

        glDisable(GL_BLEND);        
    glDisable(GL_POINT_SPRITE);
}