Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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 我的变量在移动到下一个函数后发生变化_C_Function_Pointers_Struct - Fatal编程技术网

C 我的变量在移动到下一个函数后发生变化

C 我的变量在移动到下一个函数后发生变化,c,function,pointers,struct,C,Function,Pointers,Struct,我的家庭作业中有一个我似乎无法解决的问题,任务是为城市创建某种工具来处理家庭信息,在使用调试器时,我在函数add_new_family中成功添加了一个族并移动到add_new_child之后,我注意到,只要移动到函数的第一行或第二行,我的原始结构变量就会随机变化,paretns的名称变为垃圾,如果我继续使用该函数并实际尝试添加另一个子项,它会保存有关父项名称等的信息,我似乎无法找出此问题的原因 请原谅我的内存分配铸造,如果它困扰任何人,我以前在stackoverflow中读过,它可能没有必要,但

我的家庭作业中有一个我似乎无法解决的问题,任务是为城市创建某种工具来处理家庭信息,在使用调试器时,我在函数add_new_family中成功添加了一个族并移动到add_new_child之后,我注意到,只要移动到函数的第一行或第二行,我的原始结构变量就会随机变化,paretns的名称变为垃圾,如果我继续使用该函数并实际尝试添加另一个子项,它会保存有关父项名称等的信息,我似乎无法找出此问题的原因

请原谅我的内存分配铸造,如果它困扰任何人,我以前在stackoverflow中读过,它可能没有必要,但我的教授坚持

我的代码可能还有其他关键问题,我是一名一年级的学生,如果您注意到这一点,我将不胜感激,但我的主要重点只是找出这些随机更改的原因。在我将结构发送到add_new_子函数后,我添加了一个前后的图像,以清楚发生了什么

您正在将name成员设置为指向局部变量的指针,当函数返回时,该指针将无效。您需要创建字符串的动态副本

            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