C Vertex Array错误的值

时间:2013-04-22 17:34:14

标签: c arrays vertex

我在cc.h中有这个声明

Vertex *graphVertices2;

typedef struct
{
    float XYZW[4];
    float RGBA[4];
} Vertex;

在我的cc.c中,我执行以下操作:

float vert [] = {306, 319, 360, 357, 375, 374, 387, 391, 391, 70, 82, 94, 91, 108, 114, 125, 127, 131};
            graphVertices2 = transformIntoVertex(vert, 18);

Vertex *transformIntoVertex(float *v, int size){
    int i;
    float x_axis = x_0 + (x_Max/size);
    Vertex graphVertices[18];

    for(i = 0; i < size; ++i){      
        graphVertices[i].XYZW[0] = x_axis; // x
        graphVertices[i].XYZW[1] = v[i]; // y
        graphVertices[i].XYZW[2] = 0.0f; // z
        graphVertices[i].XYZW[3] = 1.0f; // w
        if(size <= 9){
        graphVertices[i].RGBA[0] = 1.0f;
        graphVertices[i].RGBA[1] = 0.0f; // g
        graphVertices[i].RGBA[2] = 0.0f; // b
        graphVertices[i].RGBA[3] = 0.0f; // a
        }else{
            graphVertices[i].RGBA[0] = 0.0f; // r
            graphVertices[i].RGBA[1] = 1.0f; // g
            graphVertices[i].RGBA[2] = 0.0f; // b
            graphVertices[i].RGBA[3] = 0.0f; // a
        }
        x_axis = x_axis + x_axis;
        return graphVertices;
    }

但是当我打印graphVertices2时,我得到了错误的值。问题不是来自我认为的功能,我已经打印了for循环,一切都是正确的值。这些值在顶点的中间开始变得奇怪。我无法弄明白为什么。

这一行正在做正确的归因:

graphVertices[i].XYZW[1] = v[i];

我已打印并检查过。但是在顶点的中间,值非常大。

1 个答案:

答案 0 :(得分:2)

  

问题不是来自我认为的功能,

确实如此。

Vertex graphVertices[18];
// ...
// do stuff
// ...
return graphVertices;

您正在返回一个自动数组 - 在函数返回时将超出范围。您的程序调用未定义的行为,因此任何事情都可能发生。解决此问题的通常建议:将其设为static(并读取该关键字的作用),或malloc()为其获取一些动态内存(在这种情况下,您还需要free()它在使用后)。