C:为什么print语句改变了我的struct成员的值?

时间:2017-07-16 00:51:50

标签: c struct

我有一个看起来像这样的结构:

typedef struct
{
        int *numberList;
        int size;
        int maxNumber;
} list;

然后我有这个方法来创建一个列表:

list* createList(int maxNumber)
{
    list l;
    l.size = 0;
    l.numberList = malloc(maxNumber*sizeof(int));
    list* ptr = &l;
    return ptr;
}

然后我在工作中有这个方法:

int updateSize(list *ls)
{
    ls->size++;
    printf("This is a print statement.\n");

    return 0;
}

我在main方法中检查size的值,它适用于初始化和更新,但是当它到达print语句时,大小会更改为一个大的不正确的数字(垃圾值?),例如在我的代码的完整版本中,我还在我的updateSize()中使用malloc()作为我的numberList,甚至可以保留结果,因为它们应该在print语句之前。我的问题是:什么是改变我的结构成员的print语句?

1 个答案:

答案 0 :(得分:4)

您从l返回createList的地址,但l是该函数的本地地址,因此它占用的空间可以(显然是)用于其他事项,覆盖之前有什么。

相关问题