C++ 返回指向新[]数组的指针值的函数在返回结果后是否会泄漏内存?

C++ 返回指向新[]数组的指针值的函数在返回结果后是否会泄漏内存?,c++,pointers,memory-management,C++,Pointers,Memory Management,我已经读到,我们需要在指针指向用关键字“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,

我已经读到,我们需要在指针指向用关键字“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(顶点v1、顶点v2、顶点v3){
GLfloat*ArrayPtr=newglfloat[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};
返回*ArrayPtr;
};

这不好吗?如果是这样,是否有更好的方法返回整个阵列?

是的,这很糟糕。这是内存泄漏,因为分配的数组从未被删除(如您所说)

这是一个不会泄露的版本

GLfloat VertexArray(Vertex<GLfloat> v1, Vertex<GLfloat> v2, Vertex<GLfloat> v3) {
    return v1.x;
};
GLfloat VertexArray(顶点v1、顶点v2、顶点v3){
返回v1.x;
};
您编写的函数不需要分配,因为您返回的唯一值是数组中的第一个值,即
v1.x

这是一个毫无意义的函数,所以你的真实代码可能比你发布的代码更复杂


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

是的,它肯定会泄漏

动态分配和初始化24个浮点,然后只使用第一个浮点作为结果(<代码> * ARARYPTR ),不要再考虑以前分配的数组。< /P> 我不知道您的意图,但我猜,如果您的函数构建了这样一个数组,那么您希望得到它

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*
顶点阵列(顶点v1、顶点v2、顶点v3){
GLfloat*ArrayPtr=newglfloat[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};
返回阵列;
};

这是双重错误,因为实际上您只返回数组的第一个元素。
有更好的方法吗?
有更好的方法泄漏内存或。。。你首先想做什么?@eerorika“一种更好的泄露记忆和其他技巧的方法”听起来像是一本畅销书!对不起,我以为函数是不言自明的,但我想做的是返回整个数组,我的意图是返回整个数组,我会尝试的