代码有什么问题吗?打印值不符合预期

时间:2014-10-15 09:11:28

标签: c pointers

我有上面的代码,但输出不是我的预期。

typedef struct
{
    int a;
}node, *nodePtr;

nodePtr* createTest()
{
    nodePtr *head = (nodePtr*)malloc(3 * sizeof(nodePtr));
    node n1 =
    {
        3
    };

    node n2 = 
    {
        4
    };

    node n3 = 
    {
        5
    };

    head[0] = &n1;
    head[1] = &n2;
    head[2] = &n3;

    return head;
}

int main()
{
    nodePtr *n = createTest();
    nodePtr n0 = (nodePtr)(n[0]);
    printf("0: %d\n", n0->a);
    n0 = n[1];
    printf("1: %d\n", n0->a);
    n0 = n[2];
    printf("2: %d\n", n0->a);
    return 0;
}

输出应为3,4,5。 但我得到了3,1和一个随机数。为什么会这样?

1 个答案:

答案 0 :(得分:1)

head[0] = &n1;
head[1] = &n2;
head[2] = &n3;

n1n2n3是局部变量。函数createTest退出后使用其地址是未定义的行为。