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

标签 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 下的一个顶点,尽管 verts 显示其下有 3 个顶点。程序不会崩溃,但是当出现问题时 DirectX 不会渲染,它只是跳过该函数。

知道为什么会发生这种情况吗?该函数是否不返回一个已分配内存的指针,该内存是在 v 处理之后的?

最佳答案

您将返回一个指向本地自动对象的指针,该对象在您返回时已不复存在。

这是未定义的行为,即所谓的悬空指针

使该对象静态,或者动态分配它,或者其他什么。我会选择使用 std::vector

关于C++ 返回指针仅给出数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30379361/

相关文章:

c - 从 C 中的文件读取时数组未正确递增

c - 如何使用 return 命令而不是 printf 来获得定义的 float 函数的相同输出?

c - C 中带有 char 条件的 if 语句

java字符串拆分正则表达式保留定界符

c++ - 使用 imagemagick 剪切 jpg 文件

c++ - 将 'override' 用于已使用 'typedef' 声明的函数

c++ - 使用新结构的聚合初始化是否有效?

javascript - 替代使用过多的 for() 循环来搜索数组中的匹配项

java - 如何将 Java 8 流转换为数组?

c++ - 为什么 iostream 会切断某些单词的第一个字母?