我试图通过创建一个全局变量来解决GLU回调中的内存泄漏,但是现在它没有绘制任何内容:

GLdouble *gluptr = NULL;

void CALLBACK combineCallback(GLdouble coords[3], GLdouble *vertex_data[4],
                              GLfloat weight[4], GLdouble **dataOut)
{
    GLdouble *vertex;
    if(gluptr == NULL)
    {
        gluptr = (GLdouble *) malloc(6 * sizeof(GLdouble));
    }
    vertex = (GLdouble*)gluptr;
    vertex[0] = coords[0];
    vertex[1] = coords[1];
    vertex[2] = coords[2];


    for (int i = 3; i < 6; i++)
    {

        vertex[i] = weight[0] * vertex_data[0][i] +
            weight[1] * vertex_data[0][i] +
            weight[2] * vertex_data[0][i] +
            weight[3] * vertex_data[0][i];
    }


    *dataOut = vertex;


}

基本上,而不是每次使用全局指针都在循环中执行malloc(因此发生内存泄漏),但这不起作用(绘制到屏幕不起作用),这意味着dataOut没有接收到我的指针指向的顶点数据。为什么使用malloc指向在函数中创建的指针与全局变量有什么不同?

谢谢

最佳答案

您只分配一次数据-但是GLUtesselator一次需要多个数据!

您在这里所做的就是将所有顶点数据放入内存中的单个位置,在原始代码中,每个顶点有一个内存。 GLUtesselator需要一个以上的顶点才能正常运行。

进行通话

void gluDeleteTess(GLUtesselator *tessobj);

...之后,你呢?

09-30 10:53