【发布时间】:2022-11-11 02:23:13
【问题描述】:
Line 70: Char 15: runtime error: member access within misaligned address 0x7fc00000000c for type 'struct ListNode', which requires 8 byte alignment [ListNode.c]
0x7fc00000000c: note: pointer points here
<memory cannot be printed>
我刚刚在 leetcode.com 的程序中遇到了这个错误 为什么它不起作用?我尝试使用合并两个列表的第一个算法来合并 k 个列表,该算法经过测试并且正确!请对我的问题有任何解释吗?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
if (list1==NULL && list2==NULL)
return NULL;
struct ListNode head ;
struct ListNode *result = &head;
while (list1 && list2) {
if (list1->val < list2->val) {
result->next=list1;
list1=list1->next;
result = result->next;
}
else {
result->next=list2;
list2=list2->next;
result = result->next;
}
}
if (list1) {
result->next=list1;//????????????????????????????????????
}
if (list2) {
result->next=list2;
}
return head.next;
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize)
{
struct ListNode head;
struct ListNode *result = &head;
result=mergeTwoLists(lists[0],lists[1]);
for (int i = 2; i<listsSize; i++) {
result=mergeTwoLists(result,lists[i]);
}
return head.next;
}
我想知道这个错误的原因。
【问题讨论】:
-
请不要转储如此难以理解的一堆测试。应用适当的压痕。也不要在一行中编写多条指令。仅当您讨厌阅读您的代码的人时才这样做。
-
在
mergeKLists中,您似乎没有初始化head的字段。 -
特别是,
mergeKLists中的任何代码都没有对对象head做任何事情,除了最后一行返回其next成员中的任何垃圾。您首先将result指向head,但在下一行覆盖之前,您从未对result进行任何操作。result = ...仅更改指针并且对它的对象什么也不做指着. -
询问代码中的错误的问题通常需要提供minimal reproducible example。这是不可重现的,因为它没有标题、
main函数等,所以如果没有大量额外的工作和猜测如何填充这些部分,就无法编译和测试它。
标签: c linked-list