提问者:小点点

我在一个while循环中创建了一个tmp结构,但是发生了一些错误,看起来tmp结构在一个循环末端不是自由的


class Solution {

public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){struct ListNode节点;

    ListNode* head= &node;
    ListNode* h=head;
    int sum=0;
    bool carry=false;
    while(l1!=NULL||l2!=NULL)
    {
        sum=0;
        if(l1!=NULL)
        {
            sum+=l1->val;
            l1=l1->next;
        }
        if(l2!=NULL)
        {
            sum+=l2->val;
            l2=l2->next;
        }
        if(carry)
            sum++;
        struct ListNode tmp;
        tmp.val=sum%10;
        tmp.next=NULL;
        // cout<<&tmp<<endl;
        // h->next=new ListNode(sum%10);
        h->next=&tmp;
        h=h->next;
        
        // delete h->next;
        carry=sum>=10?true:false;
    }
    if(carry)
    {
        h->next=new ListNode(1);
    }
    return head->next;

}

};


共1个答案

匿名用户

我认为这可能是因为您正在while循环内的堆栈上创建tmp,然后将其地址分配给h->next。 一旦while循环迭代结束,tmp就不再在作用域中,但是您已经在h中存储了对它的引用。 您需要在堆上创建tmp才能使其工作,正如您通过将其创建为指针所发现的那样。