智能指针列表中的Segfault错误

时间:2014-02-12 18:43:26

标签: c++ segmentation-fault valgrind

我的最新项目存在段错误问题。我在valgrind下运行了我的程序但是我在解释输出时遇到了困难。我查看了the manual for valgrind,但即使这样也不能说明特定错误消息是否存在问题。例如,它说,“'仍然可以到达'块是非常常见的,并且可以说不是问题,”但是我没有足够的经验来区分它们何时可接受以及何时不可接受。有人可以看看我的valgrind日志,并给我一些关于我的代码发生了什么的见解,以及哪些报告的错误是真正的问题?

Here's a link to all of my code as well as the valgrind log.

为了简要说明在运行期间何时发生段错误,程序的工作方式如下:它接受用户输入的字符串,并生成包含数字,符号和括号的“计算器项目”列表。然后程序会分析列表,并按照您手动的方式减少它。如果等式为18-(9 + 4),它将删除“(9 + 4)”,求解9 + 4,然后将解决方案添加回原始列表,使其为18-13。列表减少为单个元素后,我的程序返回段错误。此时(line 237 in main.cpp)它应该验证唯一剩下的元素是一个数字,这意味着它是最终答案,但它不会取消引用迭代器。我不确定这是否有帮助,因为我意识到内存可能在程序的早期错误地分配/解除分配,但这是我的程序一直失败的地方。

如果我需要更具体地了解我的程序的工作方式,我不介意进行更多细节,但我不确定什么是相关的或问题可能在哪里。我应该注意到我对智能指针很新,而且之前我遇到了很多内存问题,所以我处理内存的方式很有可能是罪魁祸首。我的智能指针在bignum_decs.h中声明为calc_ptr,其功能在第1410行的bignum_classdefs.cpp中定义。提前致谢。

1 个答案:

答案 0 :(得分:1)

看起来你正在将很多NULL calc_ptrs推到堆栈上。 (使用默认构造函数:

calc_ptr() {stored = NULL;}

在第237行,在取消引用之前,您没有检查calc_ptr是否为NULL。