我正在研究 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 下的一个顶点,尽管 verts 显示其下有 3 个顶点。程序不会崩溃,但是当出现问题时 DirectX 不会渲染,它只是跳过该函数。
知道为什么会发生这种情况吗?该函数是否不返回一个已分配内存的指针,该内存是在 v 处理之后的?
最佳答案
您将返回一个指向本地自动对象的指针,该对象在您返回时已不复存在。
这是未定义的行为,即所谓的悬空指针。
使该对象静态
,或者动态分配它,或者其他什么。我会选择使用 std::vector
。
关于C++ 返回指针仅给出数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30379361/