微凉的衣柜 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日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档