毛毛快别睡啦 2023-03-03 10:49 采纳率: 50%
浏览 44
已结题

C++——LeetCode——member access within misaligned address


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
       ** ListNode* l = new ListNode();**
        int c=0; //进位位
        int val =0; //存放当前位置运算所得
        
        ListNode* p1 = l1;
        ListNode* p2 = l2;
        ListNode* p = l;
         
        if(p1==nullptr)
        {
            return l2;
        } 

        if(p2==nullptr)
        {
            return l1;
        } 

        //处理完较短的表后会跳出循环
        while(true)
        { 
           val =p1->val + p2->val+c;
           p->val = val % 10;
           c = val / 10;
           if(p1->next!=nullptr&&p2->next!=nullptr)
           {
              p1 = p1->next;
              p2 = p2->next;
              ListNode node;
              ListNode* temp = &node;
              p->next = temp;
              continue;
           }
           break;
        }
        
        //继续用进位位处理较长的表,不知道就直接两个指针一起处理
        while(p1->next!=nullptr)
        {
              ListNode node;
              ListNode* temp = &node;
              p->next = &node;
              p = temp;

              p1=p1->next;
              val = p1->val + c;
              p->val = val%10;
              c = val/10;
              //有进位未处理时
              if(c!=0&&p1->next==nullptr)
              {
                  ListNode node2;
                  temp = &node2;
                  temp->val=c;
                  p->next = temp;
              }
        }
        
        while(p2->next!=nullptr)
        {
              ListNode node;
              ListNode* temp = &node;
              p->next = temp;
              p = temp;

              p2=p2->next;
              val = p2->val + c;
              p->val = val%10;
              c = val/10;
              //有进位未处理时
              if(c!=0&&p2->next==nullptr)
              {
                  ListNode node2;
                  temp = &node2;
                  temp->val=c;
                  p->next = temp;
              }
        }
        return l;
    }
};

Line 15: Char 16: runtime error: member access within misaligned address 0x00000000000d for type 'ListNode', which requires 8 byte alignment (ListNodeUtils.cpp)
0x00000000000d: note: pointer points here

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ListNodeUtils.cpp:24:16

请大家帮忙看下,不懂为什么会出现member access within misaligned address的问题,查了之前的类似问题,但是都是说结构体内的指针没有初始化,但是尝试之后还是一样的问题,而且结构体定义中不是已经有了初始化的参数列表么?

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-03 11:09
    关注
    
    ListNode node;
                  ListNode* temp = &node;
                  p->next = &node;
    
    

    你这个代码块是要干啥呢?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 哪个tomcat中startup一直一闪而过 找不出问题
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳