C ++返回指针只给出数组的第一个元素

时间:2015-05-21 16:25:19

标签: c++ c arrays return-value

我正在使用DirectX,我有一个函数可以提供预定义的自定义顶点数组,它是

CUSTOMVERTEX* createSampleTriangle()
{
    CUSTOMVERTEX verts[] = 
    {
        {320.0f, 50.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 255, 0, 0), }, 
        {250.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 0, 255, 0), }, 
        {50.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (0, 0, 0, 255), }
    };

    return verts;
}

现在,我拿起这样的结果:

CUSTOMVERTEX *v = createSampleTriangle();

但是当我逐行调试时,我看到v下只有一个顶点,即使顶点显示3个顶点。该程序并没有崩溃,但是当出现问题时,DirectX再也无法渲染,它只是跳过该功能。

知道为什么会这样吗?该函数是否不返回具有由v?

处理的分配内存的指针

2 个答案:

答案 0 :(得分:3)

您返回指向当您返回时已停止存在的本地自动对象的指针。

那种未定义的行为,被称为悬空指针

制作该对象static,或动态分配它或其他东西。我会去使用std::vector

答案 1 :(得分:2)

我在此处看到的问题是,verts具有自动存储持续时间,并且是函数createSampleTriangle()的本地存储时间。返回它的地址并因此稍后使用它将调用undefined behaviour

详细说明,verts仅存在于为createSampleTriangle()分配的堆栈中。一旦此函数完成执行,则不存在verts。因此,使用调用函数中createSampleTriangle()的返回值( pointer )将会出错并导致UB。

相关问题