微凉的衣柜 2023-05-28 12:13 采纳率: 63.9%
浏览 15
已结题

堆上开辟指针变量释放问题

在牛客上刷BM32 合并二叉树题时,比较纠结指针释放问题,给出的c++题解如下:

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        if(!t1)
            return t2;
        if(!t2)
            return t1;
        TreeNode* head = new TreeNode(t1->val+t2->val);
        head->left = mergeTrees(t1->left, t2->left);
        head->right = mergeTrees(t1->right, t2->right);

        return head;
    }

上述题解可以通过测试,但考虑到这儿声明的head指针无法释放,因此想把TreeNode* head = new TreeNode(t1->val+t2->val);改成如下:

        TreeNode head_val(t1->val + t2->val);
        TreeNode* head = &head_val;

但这样会导致编译出错,牛客给出的出错是:

您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
您可以用printf或者cout在函数中打印信息分析问题

想请教各位,应该如何解决这个问题?

  • 写回答

2条回答 默认 最新

  • 韩楚风 数据库领域优质创作者 2023-05-29 13:07
    关注

    你在函数内定义,就变成栈内存,作用范围只在函数内,出了函数就释放了;一种可以定义全局变量,一种还是用new,但可以定义一个全局的head指针记录,最后释放;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面
  • ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)