c++ - 返回指向 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;
};
这很糟糕吗?如果是这样,有没有更好的方法来返回整个数组?
解决方案
是的,这很糟糕。这是内存泄漏,因为分配的数组永远不会被删除(如你所说)。
这是一个不会泄漏的版本
GLfloat VertexArray(Vertex<GLfloat> v1, Vertex<GLfloat> v2, Vertex<GLfloat> v3) {
return v1.x;
};
您编写的函数不需要分配,因为您返回的唯一值是数组中的第一个值,即v1.x
.
现在这是一个相当没有意义的功能,所以也许你的真实代码比你发布的代码更复杂。
也许您打算编写一个返回整个数组的函数。在这种情况下,返回您分配的指针return ArrayPtr;
。在这种情况下,您仍然需要删除指针,但您可以在调用此函数的代码中的某处执行此操作。
推荐阅读
- kubernetes - 如何安全地将 kubeconfig 提供给 kubectl
- python - 有没有办法使用 Python Requests 库确认 POST 请求是否实际上是通过代理发送的?
- python - 如何在 Tkinter 的动态大小按钮中填充图像
- mysql - SQLTrackerStore 不创建表
- json - Azure Policy 添加多个标记名称和标记值
- node.js - MongoDB客户端(nodejs)不关闭连接
- python-3.x - 芹菜错误 - 工人:热关机(主进程)
- dialogflow-es - 对 Google 推送通知的操作删除权限
- sql - 并行数据仓库中是否有等效于“TRY_CAST”的功能?
- spring - 同步执行状态动作