为什么C函数返回struct属性在第一次循环迭代后返回0?

时间:2017-07-11 21:17:09

标签: c function for-loop struct

所以我很了解C,所以如果这是一个明显的问题,请原谅我。我无法解决为什么selectedNode函数第一次返回正确的值而其他所有值都返回0。它是通过length属性从结构内部访问的。这是我的代码。

#include <stdio.h>
#include <stdlib.h>

typedef struct { int x; int y; } VECTOR;
typedef struct { VECTOR nodes[8]; int length; } NODE_LIST;

VECTOR Deltas[8] = {{-2, 1}, {-2,-1}, {-1,-2}, { 1,-2},
                    { 2,-1}, { 2, 1}, { 1, 2}, {-1, 2}};

NODE_LIST NodeSuccessors(VECTOR node)
{
    NODE_LIST successors;
    int count = 0;
    for (int i; i < 8; i++)
    {
        VECTOR N = {node.x + Deltas[i].x, node.y + Deltas[i].y};
        if ((N.x <  8) && (N.y <  8) && (N.x >= 0) && (N.y >= 0))
        {
            successors.nodes[count] = N;
            count++;
        }
    }
    successors.length = count;
    return successors;
}

int SelectedNode(NODE_LIST nodelist)
{
    int bestNode = 8; // the most a node could have.
    int len = 0;
    for (int n = 0; n < nodelist.length; n++)
    {
        len = NodeSuccessors(nodelist.nodes[n]).length;
        printf("%d, ", len);
        if (len < bestNode)
        {
            bestNode = len;
        }
    }
    return bestNode;
}

int main()
{
    VECTOR node = {4,4};
    NODE_LIST nNodes = NodeSuccessors(node);

    int best = SelectedNode(nNodes);
    printf("\nresult: %d\n", best);
}

当前产生的结果是:

8, 0, 0, 0, 0, 0, 0, 0, result: 0

干杯。

1 个答案:

答案 0 :(得分:3)

在for循环中,您有一个未初始化的值i。未初始化的值包含垃圾。

 for (int i = 0; i < 8; i++)

如果您为编译器启用了编译器选项,它会警告您。 gcc -Wall -Werror

的示例
  

错误:变量'i'在此处使用时未初始化   [-Werror,-Wuninitialized]

for (int i; i < 8; i++)
         ^