程序运行后分段故障核心转储并显示输出

时间:2015-10-15 06:18:01

标签: c segmentation-fault

我开始对我的程序进行了一些更改:但另一个原因是我遇到了分段错误。它发生在我的输出之后,我认为它可能与我在destroy函数中的自由语句有关。我通过gdb运行它,它告诉我我正在尝试访问0X000000d内存位置这很奇怪,因为我可以打印出我的结构的内存位置,它显示了不同的东西。我知道我可能错过了很小的东西。任何帮助将不胜感激,谢谢!

不得不接受m代码,因为它是学校正在进行的项目,感谢我的回复,一旦我们有了成绩,我会将其重新发布。

1 个答案:

答案 0 :(得分:1)

您的代码中有未定义的行为

采取这一行:

struct Person *UserOne=inputvalues(UserOne);

在此定义变量UserOne并通过调用inputvalues函数对其进行初始化,并为其传递未初始化的指针。这意味着在inputvalues函数内部,temp指针未初始化,并且当您取消引用指针时,其值为 indeterminate ,从而导致所述UB。

一种可能的解决方案是定义指针的结构变量,并在调用inputvalues时使用它,或者通过动态分配结构并传递给函数。或者重新设计程序,根本不将参数传递给函数,让函数本身分配结构。

使用这样的未初始化变量很容易被编译器检测到,并且大多数都可以为它发出警告。如果您没有收到此类警告,则可能需要考虑启用更多警告。