讨论/题目交流/c++ pointer runtime error 指针的奇怪问题 while(head != NULL)/
c++ pointer runtime error 指针的奇怪问题 while(head != NULL)

做题遇到一个奇怪的问题:
就是链表反转的题,我本来以为很简单,但是while(head != NULL)这行代码报错
错误信息:Line 14: Char 16: runtime error: member access within misaligned address 0x000000000007 for type 'ListNode', which requires 8 byte alignment (ListNodeUtils.cpp)
代码:

    ListNode* reverseList(ListNode* head) {
        ListNode *rehead = NULL;
        ListNode *tmp = NULL;
        while(head != NULL){
            tmp = head;
            head = head->next;
            tmp->next = rehead;
            rehead = tmp;
        }
        return rehead;
    }

然后我看了题解,发现不能直接用函数参数里面的head,而是要重新定义一个变量h=head就能过了。请问这是什么原理?

    ListNode* reverseList(ListNode* head) {
        ListNode *rehead = NULL;
        ListNode *tmp = NULL;
        ListNode *h = head;
        while(h != NULL){
            tmp = h;
            h = h->next;
            tmp->next = rehead;
            rehead = tmp;
        }
        return rehead;
    }
展开讨论
共 1 个讨论

直接改head会影响head的值,因此head的值就会不正确,所以不能改head。
但是因为你把head赋给了一个变量,所以不会改变他,就能过了。