gpt4 book ai didi

c++ - 智能指针列表的段错误

转载 作者:行者123 更新时间:2023-11-28 07:06:06 25 4
gpt4 key购买 nike

我的最新项目遇到段错误问题。我在 valgrind 下运行了我的程序,但我很难解释输出。我看过 the manual for valgrind ,但即便如此,也不清楚特定错误消息是否有问题。例如,它说,“'Still Reachable' block 非常常见,可以说不是问题,”但我没有足够的经验来区分它们何时可以接受,何时不能。有人可以看看我的 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 及其功能在 bignum_classdefs.cpp 中定义在线 1410。提前致谢。

最佳答案

看起来您正在将大量 NULL calc_ptr 压入堆栈。(使用默认构造函数:

calc_ptr() {stored = NULL;}

)

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

关于c++ - 智能指针列表的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com