我已经在我的一个 OpenGL 项目中实现了 Bill Dudney 的 .Obj模型加载器,并且目前存在大量内存泄漏!
使用仪器,我设法将其缩小到以下功能。而且我认为这与 ptr 从未被释放有关,但我仍然需要在函数末尾返回 ptr 。
const void * TextureCoordBytes(CFAllocatorRef allocator, const void *value, GLuint *size)
{
// extract the count
GLuint count = ((GLuint *)value)[0];
void *ptr = NULL;
if(1 == count)
{ // a 1D texture
ptr = CFAllocatorAllocate(allocator, sizeof(GLfloat), 0);
((GLfloat*)ptr)[0] = ((TextureCoord1D *)value)->u;
*size = sizeof(GLfloat);
}
else if(2 == count)
{ // a 2D texture
ptr = CFAllocatorAllocate(allocator, 2 * sizeof(GLfloat), 0);
((GLfloat*)ptr)[0] = ((TextureCoord2D *)value)->u;
((GLfloat*)ptr)[1] = ((TextureCoord2D *)value)->v;
*size = 2 * sizeof(GLfloat);
}
else if(3 == count)
{ // a 3D texture
ptr = CFAllocatorAllocate(allocator, 3 * sizeof(GLfloat), 0);
((GLfloat*)ptr)[0] = ((TextureCoord3D *)value)->u;
((GLfloat*)ptr)[1] = ((TextureCoord3D *)value)->v;
((GLfloat*)ptr)[2] = ((TextureCoord3D *)value)->w;
*size = 3 * sizeof(GLfloat);
}
return ptr;
}
有没有人知道我在这里缺少的东西或者我可以使用free(ptr);
并且仍然return ptr;
在使用它的方式?