gpt4 book ai didi

c++ - 帮助内存泄漏 (malloc)

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:25 25 4
gpt4 key购买 nike

我按照教程使用了 OGL tesselaton。在其中一个回调中有一个 malloc,它会在我每次渲染新帧时造成泄漏。

void CALLBACK combineCallback(GLdouble coords[3], GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut)
{
GLdouble *vertex;

vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
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;


}

我试过释放(顶点)但多边形没有渲染。我还尝试在堆上分配然后执行 delete(vertex) 但随后多边形呈现​​得很笨拙。我不确定该怎么做。

谢谢

最佳答案

您应该在 dataOut 指向的任何地方调用 free。例如,如果您从调用函数执行此操作:

combineCallback (coords, vertex_data, weight, &dataOut);

那么您应该在稍后使用完之后调用free (dataOut)。如果您free (vertex),这实际上意味着任何dataOut指向的内容都可以自由覆盖,因为您将vertex的地址分配给了*数据输出。换句话说,不要释放 vertex;释放 dataOut 指向的任何内容。

关于c++ - 帮助内存泄漏 (malloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2900531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com