c ++不同的错误取决于我是否打印变量

时间:2011-07-28 17:44:28

标签: c++ debugging segmentation-fault

前言
这可能是一个糟糕的问题,但我在这里真的没有希望。我知道我的问题很糟糕,因为它对我的问题非常具体,但我会尝试以最好和最普遍的方式描述问题......

一些背景
在我的代码中,我有一个名为bead的数据结构,其中包含一个名为LID的整数变量。我还有一个名为lipid的数据结构,其中包含三个指向(三个不同的)bead的指针。 lipid s保存在名为vector<lipid*>的{​​{1}}变量中,lipids的{​​{1}}变量等于相应bead的位置在LID +1。

在我的(蒙特卡罗 - MC)模拟过程中,我选择0到999之间的随机数并更改相应的lipid。然后,我使用名为lipids的函数测试更改,该函数一次接受一个lipid的{​​{1}}指针作为其输入(名为calcEnergy)。

问题
在我选择lipid位置编号261后,我收到了错误的分配错误。我试图找到为什么会发生这种情况,所以我输入了:

bead

当我尝试这个时,当程序选择mb位置编号132时,模拟停止(分段错误)。所以,我试着看看为什么会这样,并在屏幕上打印lipids我使用if(mb->LID ==261){ printf("something"); } 发送的每个lipids。现在该程序在132 LID中存活,并在下一个bead上粉碎。

当我尝试读取一个我知道它有效的变量时,我对程序崩溃的原因绝对无能为力。

再一次,我知道这是一个很长的镜头,但我现在还有其他想法...

感谢。

1 个答案:

答案 0 :(得分:0)

我猜想一个函数正在接受一个脂质*并覆盖它的一个珠子指针,所以稍后它会读取一个包含无效珠子数据的无效指针。

尝试编辑你的“计算能量”函数不做任何事情,只需接收指针并返回。看看是否能阻止这个bug。如果是,请一次添加一行代码,直到找到导致错误的行。