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;
}
运行时间比较菜,如果有什么可以改进的话,或者更好的方法欢迎留言!!
本文解决了一个常见的C语言链表操作问题,在实现LeetCode第二题两数相加时,由于指针未正确初始化导致的内存对齐错误。通过确保每个新分配的节点的next指针被设置为空,避免了runtimeerror。文章还分享了完整的代码实现。
2313

被折叠的 条评论
为什么被折叠?



