Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:为什么print语句会更改我的struct成员的值?_C_Struct - Fatal编程技术网

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

C:为什么print语句会更改我的struct成员的值?,c,struct,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 =

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

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(列表*ls) { ls->size++; printf(“这是一个打印语句。\n”); 返回0; }

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

您从
createList
返回
l
的地址,但是
l
是该函数的局部函数,因此它占用的空间可以(显然是)用于其他事情,覆盖以前存在的内容。

您从
createList
返回
l
的地址,但是
l
是该函数的本地地址,因此它占用的空间可以(显然是)用于其他事情,覆盖以前存在的内容。

BTW,
l.maxNumber
未分配.BTW,
l.maxNumber
未分配。 int updateSize(list *ls) { ls->size++; printf("This is a print statement.\n"); return 0; }