错误分析runtime error: member access within misaligned address 0xbebebebebebebebe for type ‘struct Node‘

以LeetCode第117题为例,在这个过程中遇到问题

​​​​​​117. 填充每个节点的下一个右侧节点指针 II`​​​​​​

 

struct Node* connect(struct Node* root) {
    if(root == NULL) return root;
    struct Node* cur = root;
    while(cur != NULL) {
        //遍历当前层的时候,为了方便操作在下一层前面添加一个哑结点
        //(注意)这里是访问当前层的结点, 然后把下一层串起来
        struct Node *dummy = (struct Node*)malloc(sizeof(struct Node));//dummy是个头结点
        //dummy->right = dummy->left=dummy->next = NULL;//最初没写这一段
        struct Node* pre = dummy;//pre表示访问下一层结点的前一个结点,在循环中执行一次pre->next = cur ->?就会记录下一层的起始节点
        //然后开始遍历当前层的链表
        while(cur != NULL) {
            if(cur->left ){
                //当前左子节点不为空,就让pre的指向它
                pre->next = cur->left;
                pre = pre->next;//更新pre
            }
            if(cur->right){
                pre->next = cur->right;
                pre = pre->next;
            }
            cur =cur -> next;//继续访问这一行的下一个节点
        }
        //把下一层串联成一个链表后,让他赋值给cur
        //后序继续循环直到cur为空
        cur = dummy->next;
    }
    return root;
}

当运用的时候就报错了,报错一直提示在pre = pre -> next;。

观察同样思路的C++代码,在struct Node *dummy = (struct Node*)malloc(sizeof(struct Node));处使用的new Node(0);,搜索过后发现只是一个简单的初始化。

在经过查询之后了解到,原因

原因:
我们在访问某个变量时,因为这个变量中含有未赋值的指针。定义但是不赋值的指针叫做野指针。野指针指向不明,对程序有不可知的后果,引用了更是出大问题,所以,c语言严格反对野指针。

 错误位置:

struct Node *dummy = (struct Node*)malloc(sizeof(struct Node));//dummy是个头结点
        

修改:将他应有的指针域全部赋值即可

struct Node *dummy = (struct Node*)malloc(sizeof(struct Node));//dummy是个头结点
dummy->right = dummy->left=dummy->next = NULL;//最初没写这一段

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值