찾다

 >  Q&A  >  본문

c++ for循环中的struct为什么在当前循环结束后没有被释放?

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

for(int i=0;i<10;i++)
{
    ListNode l1(i);
    //此处将l1添加到链表中
}

这样的写法却会导致最后的链表结果全为9,也就是说虽然每一次都是将指针指向l1但是循环中l1从来没有被释放过。。。这是为什么?
我尝试过malloc和new。都可以在当前循环结束释放,只有上述方法不行。。。。
求解。。。

黄舟黄舟2807일 전704

모든 응답(2)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 15:23:58

    지역 변수는 명령문 블록을 떠난 후 스택에서 튀어나옵니다. ListNode l1(i)이는 매번 해제됩니다. 이는 실제로 충돌이 발생하지 않는 이유는 논리가 간단하기 때문입니다. 지난번에 공개되었던 기억 공간은 다음 ListNode l1(i)으로 다시 채워지는데, 결국 9의 다음은 자신을 가리킨다.

    new와 malloc은 스택에 메모리를 할당하지 않으므로 자동으로 해제되지 않습니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 15:23:58

    l1은 스택에 있고 각 루프의 동일한 주소에 있기 때문에 후속 값이 이전 값을 덮어씁니다. new 여기서 사용해야 합니다.

    회신하다
    0
  • 취소회신하다