我开始对我的程序进行了一些更改:但另一个原因是我遇到了分段错误。它发生在我的输出之后,我认为它可能与我在destroy函数中的自由语句有关。我通过gdb运行它,它告诉我我正在尝试访问0X000000d内存位置这很奇怪,因为我可以打印出我的结构的内存位置,它显示了不同的东西。我知道我可能错过了很小的东西。任何帮助将不胜感激,谢谢!
不得不接受m代码,因为它是学校正在进行的项目,感谢我的回复,一旦我们有了成绩,我会将其重新发布。
答案 0 :(得分:1)
您的代码中有未定义的行为。
采取这一行:
struct Person *UserOne=inputvalues(UserOne);
在此定义变量UserOne
并通过调用inputvalues
函数对其进行初始化,并为其传递未初始化的指针。这意味着在inputvalues
函数内部,temp
指针未初始化,并且当您取消引用指针时,其值为 indeterminate ,从而导致所述UB。
一种可能的解决方案是定义不指针的结构变量,并在调用inputvalues
时使用它,或者通过动态分配结构并传递给函数。或者重新设计程序,根本不将参数传递给函数,让函数本身分配结构。
使用这样的未初始化变量很容易被编译器检测到,并且大多数都可以为它发出警告。如果您没有收到此类警告,则可能需要考虑启用更多警告。