【发布时间】:2020-12-28 06:59:23
【问题描述】:
我正在尝试解决 leetcode 中的merging binary trees 问题。这是我的 C++ 代码
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
TreeNode *t;
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
t->val=t1->val+t2->val;
t->left=mergeTrees(t1->left,t2->left);
t->right=mergeTrees(t1->right,t2->right);
return t;
}
};
此代码产生以下错误
Line 18: Char 12: runtime error: member access within misaligned address 0x000000000001 for type 'TreeNode', which requires 8 byte alignment (solution.cpp)
0x000000000001: note: pointer points here
<memory cannot be printed>
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:27:12
但是,如果我尝试在不使用额外 TreeNode 的情况下解决问题,如下所示,它工作正常
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
//TreeNode *t;
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
t1->val=t1->val+t2->val;
t1->left=mergeTrees(t1->left,t2->left);
t1->right=mergeTrees(t1->right,t2->right);
return t1;
}
};
有人能解释一下为什么第一个代码会导致错误吗?
【问题讨论】:
-
看起来我们需要
TreeNodeclass或struct的声明和定义。 -
好吧,准确地说,我们需要minimal reproducible example。
-
@ThomasMatthews 该链接在右侧显示 TreeNode 的定义
-
@MonkeyDLuffy:抱歉,防火墙阻止我点击链接。
标签: c++ runtime-error c++14 binary-tree dsa