You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 297题:返回结构体指针遇栈相关错误求助

问题分析与解决

第一个错误:stack use after scope

你代码里的TreeNode r(data[0] - '0')是栈上的局部变量,函数deserialize执行完毕后,函数的栈帧会被销毁,这个变量占用的内存会被系统回收或重新使用。你返回它的指针&r,后续代码访问这个指针时,就会指向一块已经无效的内存,所以触发了这个错误。

正确的解决方式:用动态内存分配

要让返回的指针指向有效的内存,必须在堆上创建TreeNode对象,用new关键字分配内存:

TreeNode* deserialize(string data) {
    if (data.empty()) return nullptr; // 必须处理空输入的边界情况
    TreeNode* root = new TreeNode(data[0] - '0');
    // 这里补充后续的反序列化逻辑(比如处理左右子树的构建)
    return root;
}

用new创建的对象存放在堆内存中,函数返回后不会被销毁,指针始终有效。LeetCode的测试框架会自动负责回收这些堆内存,不用你手动调用delete。

第二个错误:stack buffer overflow(将root设为类成员变量)

把root设为类成员变量的思路本身就有问题:反序列化每次都需要生成全新的树节点结构,复用成员变量会导致内存地址重复覆盖、递归时的栈溢出(比如多次递归调用时反复修改同一个变量,引发内存越界)。这种做法完全没必要,用堆分配的方式就能彻底解决问题。


内容的提问来源于stack exchange,提问作者user010101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:41