Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 合并2个二叉树时出现运行时错误_C++_Runtime Error_C++14_Binary Tree_Dsa - Fatal编程技术网

C++ 合并2个二叉树时出现运行时错误

C++ 合并2个二叉树时出现运行时错误,c++,runtime-error,c++14,binary-tree,dsa,C++,Runtime Error,C++14,Binary Tree,Dsa,我正试图从leetcode解决这个问题。这是我的C++代码< /p> 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->va

我正试图从leetcode解决这个问题。这是我的C++代码< /p>
    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* mergeTrees(TreeNode* t1, TreeNode* t2) {
    TreeNode *t;
    if(t1==nullptr){return t2;}
    if(t2==nullptr){return t1;}
    t->val=t1->val+t2->val;
t是未初始化的指针,因此t->val是一个错误

你大概是指这样的事吧

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
    if(t1==nullptr){return t2;}
    if(t2==nullptr){return t1;}
    TreeNode *t = new TreeNode;
    t->val=t1->val+t2->val;
它确实解决了这个问题。 然而,我们仍然可以在这里简化我们的陈述:
您将“t”初始化为指向树节点的指针,然后应该添加t=new树节点;在您编写TreeNode*t;之后;。希望能奏效:

看起来我们需要TreeNode类或结构的声明和定义。好吧,我们需要一个更精确的定义。@ThomasMatthews该链接在右侧显示了TreeNode的定义side@MonkeyDLuffy:抱歉,防火墙阻止我访问链接。
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
    if(t1==nullptr){return t2;}
    if(t2==nullptr){return t1;}
    TreeNode *t = new TreeNode;
    t->val=t1->val+t2->val;
// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return 0;
}();

static const struct Solution {
    TreeNode* mergeTrees(
        TreeNode* t1,
        TreeNode* t2
    ) {
        if (t1 && t2) {
            TreeNode* root = new TreeNode(t1->val + t2->val);
            root->left = mergeTrees(t1->left, t2->left);
            root->right = mergeTrees(t1->right, t2->right);
            return root;
        }
        
        return t1 ? t1 : t2;
    }
};