C 我的变量在移动到下一个函数后发生变化
我的家庭作业中有一个我似乎无法解决的问题,任务是为城市创建某种工具来处理家庭信息,在使用调试器时,我在函数add_new_family中成功添加了一个族并移动到add_new_child之后,我注意到,只要移动到函数的第一行或第二行,我的原始结构变量就会随机变化,paretns的名称变为垃圾,如果我继续使用该函数并实际尝试添加另一个子项,它会保存有关父项名称等的信息,我似乎无法找出此问题的原因 请原谅我的内存分配铸造,如果它困扰任何人,我以前在stackoverflow中读过,它可能没有必要,但我的教授坚持 我的代码可能还有其他关键问题,我是一名一年级的学生,如果您注意到这一点,我将不胜感激,但我的主要重点只是找出这些随机更改的原因。在我将结构发送到add_new_子函数后,我添加了一个前后的图像,以清楚发生了什么 您正在将name成员设置为指向局部变量的指针,当函数返回时,该指针将无效。您需要创建字符串的动态副本C 我的变量在移动到下一个函数后发生变化,c,function,pointers,struct,C,Function,Pointers,Struct,我的家庭作业中有一个我似乎无法解决的问题,任务是为城市创建某种工具来处理家庭信息,在使用调试器时,我在函数add_new_family中成功添加了一个族并移动到add_new_child之后,我注意到,只要移动到函数的第一行或第二行,我的原始结构变量就会随机变化,paretns的名称变为垃圾,如果我继续使用该函数并实际尝试添加另一个子项,它会保存有关父项名称等的信息,我似乎无法找出此问题的原因 请原谅我的内存分配铸造,如果它困扰任何人,我以前在stackoverflow中读过,它可能没有必要,但
s->list[s->current_listFamily_size - 1]->father->name = strdup(tmpname);
姓氏、母亲的名字和所有孩子的名字也是如此。正如在另一个答案中已经指出的,当您保存变量指针而不是实际创建字符串副本(即strcpy)时,字符串处理充满了错误 另一个问题是s->list。似乎您希望它是指向指针数组的指针,因为您可以像这样访问它:s->list[s->current\u listFamily\u size-1]-> 但您永远不会分配多个指针。在这里:
s->list = (Family**)calloc(1, sizeof(Family*))
换句话说,唯一有效的索引是零
s->list[0]->... // Is OK
s->list[1]->... // Is very bad
添加族时,需要添加更多指针。OT:在assert中执行赋值是一个非常非常糟糕的主意。
s->list[0]->... // Is OK
s->list[1]->... // Is very bad