首页 > 解决方案 > 返回指向 new[] 数组的指针值的函数在返回结果后是否会泄漏内存?

问题描述

我读过我们需要在将指针指向使用关键字“new”创建的值地址后删除指针。但是我需要获取数组中的值并将其返回给变量,所以我编写了这个函数:

GLfloat VertexArray(Vertex<GLfloat> v1, Vertex<GLfloat> v2, Vertex<GLfloat> v3) {
    GLfloat *ArrayPtr = new GLfloat[24]{ v1.x, v1.y, v1.z, v1.w, v1.r, v1.g, v1.b, v1.a,
                                         v2.x, v2.y, v2.z, v2.w, v2.r, v2.g, v2.b, v2.a,
                                         v3.x, v3.y, v3.z, v3.w, v3.r, v3.g, v3.b, v3.a };
    return *ArrayPtr;
};

这很糟糕吗?如果是这样,有没有更好的方法来返回整个数组?

标签: c++pointersmemory-management

解决方案


是的,这很糟糕。这是内存泄漏,因为分配的数组永远不会被删除(如你所说)。

这是一个不会泄漏的版本

GLfloat VertexArray(Vertex<GLfloat> v1, Vertex<GLfloat> v2, Vertex<GLfloat> v3) {
    return v1.x;
};

您编写的函数不需要分配,因为您返回的唯一值是数组中的第一个值,即v1.x.

现在这是一个相当没有意义的功能,所以也许你的真实代码比你发布的代码更复杂。

也许您打算编写一个返回整个数组的函数。在这种情况下,返回您分配的指针return ArrayPtr;。在这种情况下,您仍然需要删除指针,但您可以在调用此函数的代码中的某处执行此操作。


推荐阅读