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;
}