runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode'

本文解决了一个常见的C语言链表操作问题,在实现LeetCode第二题两数相加时,由于指针未正确初始化导致的内存对齐错误。通过确保每个新分配的节点的next指针被设置为空,避免了runtimeerror。文章还分享了完整的代码实现。

LeeCode第二题

两数相加 c语言实现报错解决


runtime error: member access within misaligned address 0xbebebebebebebebe for type ‘struct ListNode’, which requires 8 byte alignment (ListNode.c)
0xbebebebebebebebe: note: pointer points here

同样的思路,用Java实现可以运行,但是c语言却频频出现了上述所说的错误。困扰了我许多天,最后参考了一下csdn上大佬的想法,然后仔细在读这个错误,原因在你申请一个节点空间时,它的next指针也诞生出来了,注意这句note: pointer points here
说明有指针,但是你没有让他指向一个地址。所以出现这个错误,所以在你申请一个节点空间后,紧跟着把它的next赋值为空就可以了。

顺便呈上我的代码吧,思路就不多解释了,比较容易懂

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *p1,*p2,*p ,*h;
    struct ListNode *head = malloc(sizeof(struct ListNode));
    p1 = l1;
    p2 = l2;
    p = head;
    
    int t = 0;
    while (p1||p2) {
        int x = (p1!=NULL) ? p1->val:0;
        int y = (p2!=NULL) ? p2->val:0;
        int sum = x + y +t;
        t = sum/10;
        h = (struct ListNode*)malloc(sizeof(struct ListNode));
        h->next = NULL;//赋值为空
        p->next = h;
        p = p->next;
        h->val = sum%10;
        if (p1) p1 = p1->next;
        if (p2) p2 = p2->next;
    }
    if (t>0) {
        p->next = (struct ListNode*)malloc(sizeof(struct ListNode));
        p = p->next;
        p->next = NULL;
        p->val = t;
    }
    return head->next;
}

运行时间比较菜,如果有什么可以改进的话,或者更好的方法欢迎留言!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值