나는 leetcode로 코딩을하고있다. 두 숫자의 질문에 대해서는 struct를 만들 때 new를 사용하지 않았기 때문에 내 솔루션을 받아 들일 수 없습니다. 여기 내 코드입니다 :struct를 만들기 위해 new를 사용해야합니까?
그것은 말했다ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
struct ListNode temp(-1);
struct ListNode *pre = &temp;
bool PlusOne = false;
int val1 = 0;
int val2 = 0;
int sum;
while (NULL != l1 || NULL != l2)
{
if (NULL != l1)
{
val1 = l1->val;
l1 = l1->next;
}
if (NULL != l2)
{
val2 = l2->val;
l2 = l2->next;
}
if (PlusOne == true)
{
sum = (val1 + val2 + 1) % 10;
PlusOne = (val1 + val2 + 1)/10;
}
else
{
sum = (val1 + val2) % 10;
PlusOne = (val1 + val2)/10;
}
struct ListNode newNode(sum);
pre->next = &newNode;
pre = &newNode;
val1 = 0;
val2 = 0;
}
if (true == PlusOne)
{
struct ListNode newNode(1);
pre->next = &newNode;
}
pre = temp.next;
return pre;}
런타임 오류,하지만 내가 사용하는 경우 작동 사전> 다음 = 새로운 ListNode (1)이 구조체 ListNode의 newNode의 대체 (1); pre-> next = & newNode;
그 이유는 무엇입니까?
프로그램이 잘못 구성되었습니다. 세 곳에서 scope-exit에서 삭제 된 자동 변수의 반송 주소를 설정했습니다. 참조 해제 및 평가까지 포함하여 해당 주소를 사용하면 * 정의되지 않은 동작 *이 발생합니다. 특정 플랫폼에서 "작업 중"이라는 것을 목격했다는 사실은 관련이 없으며 * 정의 된 동작과 혼동되는 관찰 된 동작에 대한 증언과는 관련이 없습니다. 정의되지 않은 동작을 호출하면 이러한 관찰을 의미가 없습니다. – WhozCraig
스타일 조언 :하지 마세요 : if (true == PlusOne)'. 'PlusOne'은 이미 부울입니다. 아마도'if (true == (true == PlusOne))' – milleniumbug
@milleniumbug, 이것에 대해 더 자세히 알려주십시오. 나는 네가 의미하는 바를 이해하지 못했다. 고맙습니다! –